在Matplotlib中保持绘图窗口打开

tur*_*tle 40 python matplotlib

在编写使用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()
Run Code Online (Sandbox Code Playgroud)

Sam*_*ann 38

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

如果你有这个功能,你应该能够取代plt.show()plt.show(block=True)得到你想要的行为.

  • @Jan-PhilipGehrcke 至少在我的情况下,“fig.show()”是非阻塞的,而“plt.show()”通常是阻塞的。 (2认同)

Mad*_*ist 11

旧的问题,但更多的规范答案(也许),因为它只使用记录而非实验性的功能.

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

plt.ioff()
plt.show()
Run Code Online (Sandbox Code Playgroud)

要么

plt.ioff()
plt.gcf().show()
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,在show关闭数字之前,函数不会返回.第一种情况是阻止所有数字,第二种情况是仅阻止直到一个数字关闭.

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

import matplotlib as mpl
with mpl.rc_context(rc={'interactive': False}):
    plt.show()
Run Code Online (Sandbox Code Playgroud)

要么

with mpl.rc_context(rc={'interactive': False}):
    plt.gcf().show()
Run Code Online (Sandbox Code Playgroud)