我是 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/