我需要在使用matplotlib进行绘图时使用交互模式(它应该是脚本,而不是python或ipython控制台)。但设置plt.ion()
会导致一个奇怪的错误(?)。当我试图绘制我的身材时(我不认为它真的很重要,我做的完全正确,因为在非交互模式下它完全正常)我没有看到它 - 我得到一个空白的灰色窗口为瞬间,它暂时消失,程序退出。
如果我明确添加plt.draw()
(和plt.pause(1)
以查看结果),我会看到该图形按预期显示。如果我在修改之后做了相同的操作,我想在图中看到它时,图形会发生变化。但暂停结束后窗口仍然消失。
我在Spyder中运行它,Qt4Agg作为Ubuntu下的后端。尝试从终端运行脚本为python my_script.py
,结果完全相同。
可能是什么问题?在交互模式下如何阻止图形消失?
更新
工作示例:
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
x = np.linspace(1, 10)
y = np.sin(x)
plt.plot(x, y)
plt.draw()
plt.pause(1)
如果我运行此代码,我会看到1秒的正弦图,然后窗口消失。
更新2
我在这里找到了一个解决方案:https://stackoverflow.com/a/10724654/1304161 如果我在Spyder中正确设置了运行选项,它就可以正常工作。虽然在gnome-terminal中运行它不起作用,但我并不需要它。希望,当它成为GUI应用程序的一部分时,这将不会有问题......
答案 0 :(得分:2)
我在这里找到了一个解决方案:https://stackoverflow.com/a/10724654/1304161
如果我在Spyder中正确设置了运行选项,它的效果非常好。虽然在gnome-terminal中运行它不起作用,但我并不需要它。希望当它成为GUI应用程序的一部分时,不会出现问题。我会回来的,如果那将是一个问题,那么:)
答案 1 :(得分:0)
您可以通过在末尾添加以下两行来使其工作:
plt.ioff()
plt.show()
因此该程序可以正常工作:
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
x = np.linspace(1, 10)
y = np.sin(x)
plt.plot(x, y)
plt.draw()
plt.ioff()
plt.show()