Python show()不再重画

Python show()不再重画,python,matplotlib,Python,Matplotlib,我在linux中工作,我不知道为什么使用python和matplotlib命令只绘制一次我想要的图表。 我第一次调用show时,绘图是绘制的,没有任何问题,但第二次和接下来的两次都没有问题 我关闭显示两次调用之间图表的窗口。你知道为什么要修理它吗 谢谢AFG from numpy import * from pylab import * data = array( [ 1,2,3,4,5] ) plot(data) [<matplotlib.lines.Line2D object at

我在linux中工作,我不知道为什么使用python和matplotlib命令只绘制一次我想要的图表。 我第一次调用show时,绘图是绘制的,没有任何问题,但第二次和接下来的两次都没有问题

我关闭显示两次调用之间图表的窗口。你知道为什么要修理它吗

谢谢AFG

from numpy import * from pylab import * data = array( [ 1,2,3,4,5] ) plot(data) [<matplotlib.lines.Line2D object at 0x90c98ac>] show() # this call shows me a plot #..now I close the window... data = array( [ 1,2,3,4,5,6] ) plot(data) [<matplotlib.lines.Line2D object at 0x92dafec>] show() # this one doesn't shows me anything
在windows中,此操作非常有效:

from pylab import *
plot([1,2,3,4])
[<matplotlib.lines.Line2D object at 0x03442C10>]
#close window here
plot([1,2,3,4])
[<matplotlib.lines.Line2D object at 0x035BC570>]
有时matplotlib会带来一些麻烦,因为我们必须记住,有些选项是在matplotlibrc中设置的,例如后端或交互参数。如果从不同的编辑器IDLE tk、PyCastle wxpython或交替交互脚本使用matplotlib,则必须考虑在一种模式下工作的配置可能会在另一种模式下出现问题,并且必须以编程方式或使用专用配置文件进行修改


我给出的示例直接起作用,没有显示,因为在matplotlibrc中,我将interactive设置为True作为默认值

我猜您是在Windows上的空闲状态下这样做的,因为我注意到了同样的问题

根据我的推断,使用带有基本Python dist的TkAgg后端存在一个问题,当使用带有IDLE的matplotlib时,TkAgg后端似乎是matplotlib的默认值。这与IDLE使用子进程的方式有关,因为如果我用-n选项启动IDLE,它会禁用子进程,那么我就没有这个问题。在Windows上使用-n选项启动它的一个简单方法是右键单击并归档,然后选择“以空闲方式打开”。如果你这样做,你应该得到一个空闲的外壳,上面写着 ==没有子流程===

就在提示上方。例如,借用joaquin解决方案中的代码,您可以尝试以下简单代码:

from matplotlib import interactive
interactive(True)
from pylab import *
plot([1,2,3,4])
然后关闭窗口并再次在控制台中键入最后一行。它在空闲时使用-n选项对我有效


那你能做什么呢?您总是可以在没有子进程的模式下空闲运行,但这样做会有危险。您可以使用不同的IDE。很多人建议我买IPython,尽管我自己还没有被说服。您还可以尝试matplotlib的其他后端。过一会儿我将尝试一下,因为我一直在想它是否会起作用。

编辑器/IDE窗口系统和绘图窗口之间可能存在冲突

解决这个问题的一个很好的方法是使用。IPython是一个很好的交互环境,并且已经解决了这些问题,并且还有许多其他优势。开始时,使用终端窗口IPython-pylab中的命令启动IPython,将其置于交互式pylab模式。

show仅在程序中使用一次,最后:它是一个永不结束的循环,用于检查图形窗口中的事件

做你想做的事情的正常方式是:

# … plot …
draw()  # Draws for real
raw_input()  # Or anything that waits for user input

# … 2nd plot …
draw()
raw_input()

# Last plot
show()  # or, again, draw(); raw_input()
你可以试试看这是否适合你

或者,您可以尝试更改后端,因为某些后端比其他后端工作得更好:

import matplotlib
matplotlib.use('TkAgg')  # For other backends, do matplotlib.use('') in a shell

谢谢你的回复,但它不起作用。可能我有一些问题,因为现在当我试图关闭windows时,操作系统说它没有响应。您使用的是哪个shell/IDE?你设置了哪个后端?使用ipython时会遇到同样的问题吗?
import matplotlib
matplotlib.use('TkAgg')  # For other backends, do matplotlib.use('') in a shell