Matplotlib的draw()方法没有任何效果
我想用matplotlib里的draw()方法来动态更新一个图表。我试着直接使用,
import matplotlib.pyplot as plt
import time
plt.plot(range(10))
plt.draw()
但是这样根本没有任何效果。程序运行后就关闭了,根本没显示出图表。我运行了下面的程序,希望show方法能生成一个图表窗口并更新,但我得到的结果是,后端只在第一次show命令时绘制了图表,之后就再也没有更新。我觉得show()方法让会话一直挂着,直到窗口关闭。
import matplotlib.pyplot as plt
import time
plt.plot(range(10))
plt.show()
time.sleep(1)
plt.plot(range(50))
plt.draw()
我在运行最新版本的Mac OS X(截至2014年7月15日)。好吧,这个方法不行。接下来我试着用一个不同于默认的后端('tkagg')。我还启用了matplotlib的交互模式(ion())。
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt
import time
plt.ion()
plt.plot(range(10))
plt.show()
time.sleep(1)
plt.plot(range(50))
plt.draw()
接下来,我在想,也许show()和draw()方法已经不需要了,所以我把它们删掉了。结果是,程序运行后关闭,根本没显示窗口。
如果draw()方法不修改画布,我该如何动态更新图表呢?当我在命令行使用python解释器时,这个交互模式是有效的,但一旦我用“python myfile.py”执行文件,就不行了。我下载并尝试了无数个例子,但没有一个能在我的电脑上更新图表……求助!!
1 个回答
2
import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()
plt.plot(range(50))
plt.show()
上面的做法对我有效。你需要先关闭第一个图像窗口,才能看到第二个图像。这是因为 plt.show()
是一个阻塞函数,它会让程序停下来,直到你关闭这个窗口。
如果你想在同一个窗口里显示多个图像,可以使用matplotlib的交互模式。
import matplotlib.pyplot as plt
import time
plt.ion()
plt.plot(range(10))
plt.draw()
time.sleep(20)
plt.plot(range(50))
plt.draw()
time.sleep(20)
这个方法确实有效,但在我的电脑上,图像窗口不会在最前面打开。所以,你需要在OSX上向上滑动一下,才能找到这个窗口。