我想绘制一个MatPlotLib.PyPlot图,它会随着时间的推移而更新,并且不会阻塞程序的执行。我不希望用户每次更新时都必须按某个键才能显示新图形。
我相信plt.show(block=False)
是我想要的。但是,我的代码并没有按预期执行。
下面是我的代码:
import matplotlib.pyplot as plt
import time
def ShowGraph():
n = 2
while True:
x = [i for i in range(n)]
y = [i for i in range(n)]
plt.plot(x, y, 'r-')
plt.ylim([0, 10])
plt.xlim([0, 10])
plt.show(block=False)
time.sleep(1)
n += 1
ShowGraph()
这应该每秒绘制一个新的图形,红线一次比一次长。但是,所有显示的都是第一次调用plt.show()
之后的图形。我做错了什么?
发布于 2016-04-05 17:13:10
当我按原样尝试您的代码时,它陷入了无限循环。因此,我稍微修改了您的代码以使其正常工作。
主要是,您需要在循环的第一次迭代之后使用plt.draw()
更新您的图形。非交互模式下的plt.show()
仅按原样显示图形,即使使用block=False
也不会更新图形。您仍然需要plt.draw()
来更新图形。
import matplotlib.pyplot as plt
import time
def ShowGraph():
n = 2
j = 1
while j <= 10:
x = [i for i in range(n)]
y = [i for i in range(n)]
plt.plot(x, y, 'r-')
plt.ylim([0, 10])
plt.xlim([0, 10])
if j > 1:
plt.draw()
else:
plt.show(block=False)
time.sleep(1)
n += 1
j += 1
ShowGraph()
https://stackoverflow.com/questions/36432256
复制相似问题