Matplotlib图形窗口在交互模式下消失

4
我需要在使用matplotlib绘图时使用交互模式(应该是一个脚本,而不是python或ipython控制台)。但是设置plt.ion()会导致奇怪的错误。当我尝试绘制我的图形时(我认为确切地做什么并不重要,因为在非交互模式下它运行得非常好),我看不到它 - 我只能瞬间看到一个空灰色窗口,然后程序就退出了。
如果我明确添加plt.draw()(和plt.pause(1)来查看结果),我将看到图形按预期显示。如果我在图形可见时进行所需修改后重复此操作,则图形将更改。但是,在暂停结束后,窗口仍然消失。
我在Ubuntu下使用Qt4Agg作为后端在Spyder中运行它。尝试从终端运行脚本,如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://dev59.com/62gv5IYBdhLWcg3wSe22#10724654 如果我在Spyder中正确设置运行选项,它可以完美地工作。虽然在gnome-terminal中运行不起作用,但我真的不需要它。希望当它成为GUI应用程序的一部分时不会有问题......

@Ffisegydd 很抱歉,这并不容易... 我会尝试制作一个可行的示例。 - Phlya
没问题,已经更新了问题(不会有任何问题的 :)) - Phlya
是的,谢谢,我知道那个 :) 只是在准备回答。祝你好运! - Phlya
3个回答

3
我在这里找到了一个解决方案:https://dev59.com/62gv5IYBdhLWcg3wSe22#10724654 如果我在Spyder中正确设置运行选项,它就可以完美地工作。虽然在gnome-terminal中运行不起作用,但我并不真正需要它。希望当它成为GUI应用程序的一部分时,不会有任何问题。如果有问题,我会回来的 :)

1
你可以通过在结尾添加这两行代码使其正常工作:
plt.ioff()
plt.show()

So this program works fine:

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()

0

要在不同的时间显示多个图形,您可以在plt.show()之后使用code.interact(local=locals()),以暂停Python解释器,直到在Python Shell中按下Ctrl-Z:

import code
import matplotlib.pyplot as plt
import numpy as np

# Start pyplot's "interactive mode" which lets you run plt.show multiple times
plt.ion()

x = np.linspace(1, 10)
y = np.sin(x)

# PLOT #1 - displayed
plt.plot(x, y)
plt.draw()
plt.show()

# Wait for figure to be closed AND Ctrl-Z pressed in Python Shell
code.interact(local=locals())

print("Some more code can go here...")

# PLOT #2 - displayed
plt.plot(x, y)
plt.show()

# Wait for figure to be closed AND Ctrl-Z pressed in Python Shell
code.interact(local=locals())

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