python - 更新循环内的图形

标签 python python-2.7 matplotlib

我是 Python matplotlib 新手,想要在循环中更新图形。 这是一些简单的测试代码。我想画3张图,每张图2秒,每次都有不同的斜率。当然,我知道我应该阅读更多有关 matplotlib 的内容,但我需要快速做一些事情。下面有什么问题吗?谢谢!

#!/usr/bin/env python

import matplotlib.pyplot as plt
import numpy as np
import time

def demo(a):
    y = [xt*a+1 for xt in x]
    ax.plot(x,y)

if __name__ == '__main__':
    plt.ion()
    fig, ax = plt.subplots()
    ax.set_ylim([0,15])
    x = range(0,5)
    for a in range(1,4):
        demo(a)
        time.sleep(2)

我认为 plt.ion() 使其具有交互性,并且 ax.plot(x,y) 立即生效(但我猜不是)。我尝试在 ax.plot(x,y) 之后添加 ax.draw() 但它需要一些参数,例如艺术家或我还不知道的东西:)。另外,我收到此错误消息(Ubuntu 14.04.LTS)。

Xlib:  extension "XInputExtension" missing on display ":1.0".
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x0

编辑:我在下面添加了正确的代码。 (根据 Estilus 的解决方案,我对其进行了一些修改以正确显示图形。

#!/usr/bin/env python

import matplotlib.pyplot as plt
import numpy as np
import time

def demo(a):
    plt.cla()
    y = [xt*a+1 for xt in x]
    ax.set_ylim([0,15])
    ax.plot(x,y)

if __name__ == '__main__':
    plt.ion()
    fig, ax = plt.subplots()
    x = range(5)
    for a in range(1,4):
        demo(a)
        plt.pause(3)
        plt.draw()

最佳答案

因此 plt.ion() 需要暂停一小段时间才能进行交互。否则,您只会遇到卡住的白屏。其次,您想使用 draw() 来更新图形。因此,您的代码将如下所示:

import matplotlib.pyplot as plt
import numpy as np
import time

def demo(a):
    y = [xt*a+1 for xt in x]
    ax.plot(x,y)

if __name__ == '__main__':
    plt.ion()
    fig, ax = plt.subplots()
    ax.set_ylim([0,15])
    x = range(0,5)
    for a in range(1,4):
        demo(a)
        plt.pause(3)
        plt.draw()

我将暂停时间设置为 3 秒,但如果您愿意,它可以是一个非常小的数字(例如 0.000001)。希望这有帮助!

关于python - 更新循环内的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461113/

相关文章:

python - 使用 Django-piston 获取完整的堆栈跟踪

python - 将类方法访问到实例方法的最佳方法

python - 在 GAE 中使用 matplotlib

python - 如何在 macOS 上的 Pycharm 中运行 matplotlib?

Python re.finditer() : concisely detect "A or :B or C:D"

python - 从另一个 DataFrame 添加多个列时出现 Pandas KeyError

python - i(1054, "Unknown column ' rango_category.slug' in 'field list' ") Django

python-2.7 - 如何从加入同一个 pyspark 数据帧中删除 'duplicate' 行?

Linux下Python子进程Popen准备Python路径

python - 使用 OpenCV 或 Matplotlib 的图像选项卡