9

奇怪的行为,我敢肯定这是我搞砸了,但我想了解正在发生的事情:

我正在运行以下代码来使用 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 到 3 又回到 1,x 轴点为 0、1、2 (仅作为示例)。现在我关闭图形窗口(使用窗口右上方的十字按钮)。这让我可以控制解释器,然后我重新开始,创建新对象:

>>>
>>> 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”,但为了学习,我想了解上述错误。

谢谢。

4

6 回答 6

8

晚会晚了三个月,但我在 matlibplot 文档中找到了使用 draw() 而不是 show() 的建议;前者显然只是对当前情节进行渲染,而后者则启动了所有交互式工具,这似乎是问题开始的地方。

它在文档中并没有非常突出,但这里是链接: http: //matplotlib.sourceforge.net/faq/howto_faq.html#use-show

对于它的价值,我已经尝试过 pylab.show() 并且遇到了与您完全相同的问题,而 pylab.draw() 如果我只想查看输出,似乎可以正常工作。

于 2009-11-24T04:25:16.347 回答
2

您是否尝试过使用 ipython 而不是标准的 python 解释器?

您可以使用以下命令安装 ipython:

easy_install ipython

然后,ipython 有一个特定的模式可以用 pylab 运行,称为 -pylab:

ipython -pylab

In[1]: ...

我认为大多数人使用这个解决方案来用 python 绘制图形,它是一个类似于 R/Matlab、completion 等的命令行......它为每个绘图运行一个单独的线程,所以它不应该有你描述的问题。

于 2009-08-02T22:29:21.330 回答
2

显然,这是由 tkinter 后端中的错误引起的。参见,例如https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/313834。它正在处理中...如果您可以退回到稍旧的 tkinter 库,那应该是暂时的解决方法(几周前我遇到了同样的事情,这是我唯一的希望)。

于 2009-08-08T21:23:59.767 回答
0

你试过了吗:

plt.close()

确保您关闭了绘图对象?

于 2009-08-02T18:22:44.623 回答
0

正如上面某处发布的那样:

用于plt.draw()除最后一个以外的所有地块。

对于你的最后一个情节,使用plt.show()

这很奇怪,但是如果您不在plt.show()最后一个中使用并尝试plt.draw()使用,您将看不到任何情节。

祝你好运!

于 2009-12-13T03:19:05.680 回答
0

我在使用 TkAgg 作为后端时遇到了这个问题。使用后plt.close('all')我的电脑死机了。

解决方案是切换到不同的后端。我现在改用 Qt4Agg。

如果您安装了 Qt4Agg,则可以通过键入以下内容来切换后端:

plt.switch_backend('Qt4Agg')

绘制数据之前

于 2016-09-05T08:50:44.787 回答