show()方法不会打开窗口。

15
我正在使用Mac电脑,当我在matplotlib中进行以下操作时:
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import pylab as P

...
plt.plot(x,y)  
plt.show() <-- nothing happens
plt.savefig('figure.png') <-- works fine

所以,plt.show不会打开窗口或任何东西,而plt.savefig却正常工作。
可能是什么问题呢?

2
标题说show()不起作用。问题是.plot不起作用。到底是哪一个?plt.show()是打开图形的正常方式。 - M4rtini
啊,抱歉我在代码引用中犯了一个错误。已经更正了。 - toom
你仍然在说“所以,plt.plot不会打开一个窗口”。但是你的意思是“show()”,对吗? - Dr. Jan-Philip Gehrcke
是的,我指的是 plt.show()。 - toom
在我的电脑上,plt.show() 触发了一个“选择默认程序”的弹窗,我不小心选择了 VS Code。如何重置它? - Dendi Handian
2个回答

20

如果没有使用 plt.show() 命令,pyplot 将不会弹出图像窗口。

matplotlib.rcParams['interactive'] == True

如果您:

  • 在脚本中之前调用了plt.ion(),或者
  • 等效地调用了matplotlib.interactive(True),或者
  • 在命令行上使用了--pylab选项启动了一个ipython会话。

当交互模式关闭时,通常必须显式调用 plt.show() 来显示图形窗口。这是因为我们经常想要在显示图形之前多次调用plot来绘制各种各样的东西(这是一个阻塞调用)。


编辑(问题修改后):

导致plt.show()不弹出图形窗口的原因之一是您尚未激活交互式后端。检查plt.get_backend()的输出-例如,如果返回'agg',则表示您有一个非交互式后端。

如果这是您的问题,可以添加类似以下行:

import matplotlib
matplotlib.use('MacOSX')
在脚本的开头指定后端。这需要放在任何其他与Matplotlib相关的导入之前。
要使此类更改永久生效,可以通过修改Matplotlib rc文件来指定不同的后端作为默认值。该文件的位置可以通过调用matplotlib.matplotlib_fname()找到。

1
tooms的问题似乎是show()没有打开窗口。看起来他没有预料到plot()会打开一个窗口。 - Dr. Jan-Philip Gehrcke

1

对于我来说,我有一些类似这样的代码:

from matplotlib import pyplot as plt
figure = plt.Figure()
axes = figure.add_subplot()
axes.plot([1,2], [1,2])
plt.show()

plt.show()没有阻塞或执行任何操作。如果我将代码更改为以下内容,则可以正常工作:

figure = plt.Figure()
plt.plot([1,2], [1,2])
plt.show()

我的问题是我需要在一个子图中显示多个图表,所以我需要使用轴。以下是解决方法:

figure, axes = plt.subplots()
axes.plot([1,2], [1,2])
plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接