Matplotlib python show()立即返回

Matplotlib python show()立即返回,python,matplotlib,Python,Matplotlib,我有一个简单的python脚本,它在同一个图中绘制了一些图。所有图都是由draw()创建的,最后我调用show()函数来阻止 用于与Python 2.6.6、Matplotlib 0.99.3和Ubuntu 11.04一起使用的脚本。尝试在Python2.7.2、Matplotlib 1.0.1和Ubuntu11.10下运行它,但是show()函数立即返回,而不用等待终止该图 这是虫子吗?或者一个新的功能,我们将不得不改变我们的脚本?有什么想法吗 编辑:它确实在交互模式下保持绘图打开,即pyth

我有一个简单的python脚本,它在同一个图中绘制了一些图。所有图都是由draw()创建的,最后我调用show()函数来阻止

用于与Python 2.6.6、Matplotlib 0.99.3和Ubuntu 11.04一起使用的脚本。尝试在Python2.7.2、Matplotlib 1.0.1和Ubuntu11.10下运行它,但是show()函数立即返回,而不用等待终止该图

这是虫子吗?或者一个新的功能,我们将不得不改变我们的脚本?有什么想法吗


编辑:它确实在交互模式下保持绘图打开,即python-i…,但它过去在没有交互模式的情况下工作,并尝试在脚本中使用plt.ion()并在正常模式下运行,但没有成功。

我认为使用
显示(block=True)
应该可以解决您的问题。

我也遇到了同样的问题,它是由对Figure对象而不是pyplot对象调用
show()
引起的

错误代码。使图形在屏幕上短暂闪烁:

    import matplotlib.pyplot as plt

    x = [1,2,3]
    y = [5,6,7]

    fig = plt.figure()
    plt.plot(x, y)

    fig.show()
最后一行应如下所示,以显示图形,直到其被取消:

    plt.show()
有,而且matplotlib似乎将在交互或非交互模式下工作,基于我无法跟踪的许多事情(一种方式在空闲状态下,另一种方式在系统控制台中,一种方式在普通spyder控制台中,另一种方式在专用控制台中…)

这对我很有用:

import matplotlib
matplotlib.interactive(False)
(事实上,我想要的是交互模式,但在您的情况下,反过来应该会有所帮助。)
ion()
ioff()
应该做同样的事情,但是上面的内容是matplotlib级别的,而不仅仅是pyplot或pylab。虽然我(稍后)单独导入pyplot,并且不再调用matplotlib,但这对我来说是可行的。我认为plt.ion()只对pyplot有影响,而不是使用pyplot时可能涉及或不涉及的matplotlib的其他组件


这种方法适用于我在Windows 7上使用的情况,在这两个系统(均为64位)上的所有可用Python控制台和IDE上使用Python 2.65和matplotlib 0.99以及Python 2.75和matplotlib 1.3.1。但是,它在Linux(SuSe 11.3,64位)上不起作用,因此在Figure对象上调用show()时,这里肯定存在一些平台依赖性来复制tkagg后端的matplotlib.show()行为:

import Tkinter as Tk
import matplotlib.pyplot as plt
fig = plt.figure()
... your plot commands...
fig.show()
Tk.mainloop()

下面的代码也有同样的问题

import matplotlib.pyplot as plt

plt.ion()
fig,ax0 = plt.subplots(figsize=(5.3,4))

plt.show()

我删除了plt.ion(),绘图保持不变,不会自动关闭。

代码是SO的主要主题。给我们一些你是对的。我试着用一个更简单的例子来重现它,但没有成功。我将尝试精简代码并向您强调问题的根源。解决方法可能是在脚本的最后一行使用原始输入()。我想到了它,并改为使用time.sleep,但图形处理程序不起作用,它被冻结,因此我放弃了这个想法,但您是正确的。对于原始输入,我没有这个问题!很好,但是,它应该在不使用原始输入的情况下工作。你在什么地方有问题。试着组合一段代码来重现效果。或者反过来,在您删除的代码中查找问题,以准备现在可以工作的代码片段!:-)谢谢你的回答,但是没有。可能是旧版本。它只是告诉我block是一个意外的参数。@gpierris
block
show
的参数至少在matplotlib 1.1.0中存在。但是,默认设置为阻止,因此,如果之前在代码中未更改模式,则将其设置为True与matplotlib 2.2.3Tkinter不是软件包中的工作无关。他的例子对于python2是正确的,在Python3中是正确的。同时也证实,他的解决方案适用于我们的特定用例。非常感谢。这也是我的问题,但仅在独立Python中。在水蟒身上一切都很好。所以这是一个Bug还是一个特性?