奇怪的行为,我确定这是我搞砸了,但我想深入了解正在发生的事情:
我正在运行以下代码,使用matplotlib创建一个非常简单的图形窗口:
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x0290B750>]
>>> plt.show()
正如预期的那样,我得到了一个人们所期望的图表,在一个新的窗口中弹出,包含一条非常简单的蓝线,在y轴上再次从1回到1,0,1,2为x轴点(仅作为示例)。现在我关闭图形窗口(使用窗口右上角的十字按钮)。这让我可以控制解释器,然后我重新开始创建新对象:
>>>
>>> fig1 = plt.figure()
>>> bx = fig1.add_subplot(111)
>>> bx.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x029E8210>]
>>> plt.show()
这一次,我得到一个窗框,里面没有任何东西(只是框架,没有白色背景),整个爆炸拍摄都挂了。我必须“结束任务”,python解释器被系统终止,我得到一个命令提示符。在mac上的类似行为(除了它实际上首先绘制图形,然后也挂起)。
所以不知何故Python和/或matplotlib不希望我手动关闭窗口。有人知道发生了什么,我应该做什么?我想做的是在解释器中使用不同的情节,显然这种行为没有帮助。我知道我可以使用“Ipython -pylab”,但为了学习,我想了解上述错误。
感谢。
答案 0 :(得分:8)
晚会结束三个月,但我在matlibplot文档中发现了一个使用draw()而不是show()的建议;前者显然只是对当前情节进行渲染,而后者启动了所有交互式工具,这就是问题似乎开始的地方。
它在文档中并不是非常突出,但这里是链接: http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show
对于它的价值,我已经尝试了pylab.show()并且你遇到了完全相同的问题,而pylab.draw()似乎可以正常工作,如果我只想查看输出。
答案 1 :(得分:2)
您是否尝试过使用ipython而不是标准的python解释器?
您可以使用以下命令安装ipython:
easy_install ipython
然后,ipython有一个特定的模式用pylab运行,叫做-pylab:
ipython -pylab
In[1]: ...
我认为大多数人使用这个解决方案用python绘制图形,它是一个类似于R / Matlab,completition等的命令行...它为每个绘图运行一个单独的线程,所以它不应该有你描述的问题。
答案 2 :(得分:2)
显然,这是由tkinter后端的错误引起的。例如,见https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/313834。它正在...... 如果你可以回归到一个稍微老一点的tkinter库,那应该是暂时的解决方法(几周前我碰到了同样的事情,这是我唯一的希望)。
答案 3 :(得分:0)
plt.close()
确保你关闭了情节对象?
答案 4 :(得分:0)
如上所述:
对所有情节使用plt.draw()
,除了最后一个。
对于您的上一个情节,请使用plt.show()
这很奇怪,但是如果你不在最后一个中使用plt.show()
并尝试使用plt.draw()
,则看不到任何情节。
祝你好运!
答案 5 :(得分:0)
使用TkAgg作为后端时出现此问题。使用plt.close('all')
后我的计算机冻结了。
解决方案是切换到不同的后端。我现在改用Qt4Agg。
如果您有Qt4Agg installed,可以通过输入以下内容来切换后端:
plt.switch_backend('Qt4Agg')
在绘制数据之前