我不确定如何更清楚地说出我的问题.基本上,PyPlot是否仅限于一个实例/窗口?我尝试的任何黑客或变通办法都会导致我的程序冻结或第二个pyplot窗口排队,直到第一个关闭.
Matplotlib的pyplot中"交互模式"的文档如下:
pyplot接口的交互属性控制是否在每个pyplot命令上绘制图形画布.如果interactive为False,则每个绘图命令都会更新图形状态,但只会在显式调用draw()时绘制.当interactive为True时,则每个pyplot命令都会触发绘制.
这似乎很清楚:当交互模式打开时,人们可以不必plot()这样做draw().但是,在以下代码中执行draw()不会执行任何操作:
from matplotlib import pyplot as pp
# Interactive mode is off by default
pp.plot([10, 20, 50])
pp.draw()
raw_input('Press enter...') # No graph displayed?!!
Run Code Online (Sandbox Code Playgroud)
(在Windows XP上,Matplotlib 1.0.1).
ion()在开头添加会使图形出现,同时等待用户输入enter(方便地关闭所有数字):
from matplotlib import pyplot as pp
ion()
pp.plot([10, 20, 50]) # No draw() is necessary
raw_input('Press enter...') # The graph is interactive *and* the terminal responds to enter
Run Code Online (Sandbox Code Playgroud)
因此,看起来ion()确实更不是每个绘图命令后,只是增加自动图表更新,可惜我不能找到文档中任何事情.后一个程序的另一个更重要的问题是ion()使所有绘图命令更新图形,这在单个图形被多次更新时是耗时的.
那么,有没有办法:
使用matplotlib时:
from matplotlib import pyplot as plt
figure = plt.figure()
ax = figure.add_subplot(111)
ax.plot(x,y)
figure.show() # figure is shown in GUI
# How can I view the figure again after I closed the GUI window?
figure.show() # Exception in Tkinter callback... TclError: this isn't a Tk application
figure.show() # nothing happened
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
如果调用了Figure.show(),如何获取上一个图?
figure.add_suplot(111)如果我有多个数字,因此from pylab import *; plot(..); show()似乎不是我正在寻找的解决方案,是否有更方便的替代方法。
我渴望的是
showfunc(stuff) # or
stuff.showfunc()
Run Code Online (Sandbox Code Playgroud)
其中stuff是一个对象,其中包含布置在一张图片中的所有图,并且showfunc是无状态的(我是说,每次调用它时,我的行为就像第一次调用一样)。与之合作时可能matplotlib吗?
因此,我将以下简单代码保存在 .py 文件中,并在 shell 中执行:
import matplotlib.pyplot as plt
myfig = plt.figure(figsize=(5, 5))
ax1 = myfig.add_subplot(1, 1, 1)
myfig.show()
Run Code Online (Sandbox Code Playgroud)
但是它在执行时什么都不做,没有错误。
然后,当我在 shell 中启动 Ipython 并键入完全相同的代码时,它确实会弹出一个空窗口。这是为什么?
当然我可以使用 plt.show() 一切都很好。但是假设我有两个图形,fig1 和 fig2,并且两个图形中都有东西,而我只想显示其中一个,我该怎么做?plt.show() 绘制它们。
对不起,如果这是愚蠢的我只是好奇为什么在 ipython 中交互工作时,窗口会在调用 fig1.show() 时弹出,但是当我在 shell 中执行相同的脚本但执行以下操作时没有任何反应:python myfile.py
谢谢!
import matplotlib
import pylab
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y=[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
plotting=pylab.plot(x,y)
pylab.show(plotting)
Run Code Online (Sandbox Code Playgroud)
上面的代码(特别是最后一行)会弹出下图:

如果我关闭图形窗口,并>>>pylab.show(plotting)再次运行最后一行(),图形将不会再次弹出.为什么会这样?上面的代码在Python 2.7.3中运行.