49

在编写使用 matplotlib 的脚本时,我会在运行脚本时暂时获得一个交互式图形窗口,在我查看绘图之前它会立即消失。如果我在 iPython 中以交互方式执行相同的代码,图形窗口将保持打开状态。当我运行脚本时,如何让 matplotlib 在生成图形后保持绘图打开?

例如,我可以保存这个图,但我不能显示它show()

from matplotlib import pyplot as plt
import scipy as sp

x =  sp.arange(10)
y =  sp.arange(10)

plt.plot(x,y)
plt.show()
4

2 回答 2

45

根据文档block您可以将一个实验参数传递给plt.show(). 当然,如果你的 matplotlib 版本不够新,它就不会有这个。

如果您有此功能,您应该能够替换plt.show()plt.show(block=True)以获得您想要的行为。

于 2012-09-10T20:39:59.457 回答
14

老问题,但更规范的答案(也许),因为它只使用记录的而不是实验性的功能。

在您的脚本退出之前,进入非交互模式并显示您的数字。这可以使用plt.show()或来完成plt.gcf().show()。两者都会阻止:

plt.ioff()
plt.show()

或者

plt.ioff()
plt.gcf().show()

在这两种情况下,该show函数将在图形关闭之前返回。第一种情况是阻塞所有图形,第二种情况是阻塞直到一个图形关闭。

您甚至可以使用matplotlib.rc_context上下文管理器临时修改程序中间的交互状态,而无需更改任何其他内容:

import matplotlib as mpl
with mpl.rc_context(rc={'interactive': False}):
    plt.show()

或者

with mpl.rc_context(rc={'interactive': False}):
    plt.gcf().show()
于 2016-07-26T14:37:57.367 回答