Matplotlib的draw()方法没有任何效果

2 投票
1 回答
3868 浏览
提问于 2025-04-18 13:28

我想用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上向上滑动一下,才能找到这个窗口。

撰写回答