相关疑难解决方法(0)

是否可以有多个PyPlot窗口?或者我只限于次要情节?

我不确定如何更清楚地说出我的问题.基本上,PyPlot是否仅限于一个实例/窗口?我尝试的任何黑客或变通办法都会导致我的程序冻结或第二个pyplot窗口排队,直到第一个关闭.

python plot interpreter matplotlib hang

31
推荐指数
4
解决办法
5万
查看次数

Matplotlib的"交互模式"(ion(),ioff())的精确语义?

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图,
  • ...而不强制交互模式在开始时打开(以便不强制图形的自动更新,这可能是耗时的)?

python matplotlib interactive-mode

21
推荐指数
1
解决办法
2万
查看次数

matplotlib再次显示图

使用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)

所以我的问题是:

  1. 如果调用了Figure.show(),如何获取上一个图?

  2. figure.add_suplot(111)如果我有多个数字,因此from pylab import *; plot(..); show()似乎不是我正在寻找的解决方案,是否有更方便的替代方法。

我渴望的是

showfunc(stuff) # or
stuff.showfunc()
Run Code Online (Sandbox Code Playgroud)

其中stuff是一个对象,其中包含布置在一张图片中的所有图,并且showfunc是无状态的(我是说,每次调用它时,我的行为就像第一次调用一样)。与之合作时可能matplotlib吗?

python matplotlib

5
推荐指数
1
解决办法
2187
查看次数

plt.figure.Figure.show() 不以交互方式执行时什么也不做

因此,我将以下简单代码保存在 .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

谢谢!

python matplotlib ipython jupyter-notebook

5
推荐指数
1
解决办法
4134
查看次数

不止一次显示情节窗口

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中运行.

python matplotlib

2
推荐指数
1
解决办法
533
查看次数