我想要做的是让脚本计算一些东西,准备一个绘图并将已经获得的结果显示为pylab.figure - 在python 2(特别是python 2.7)中使用稳定的matplotlib(1.1.1).
在python 3(带有matplotlib git build ...版本1.2.x的python 3.2.3)中,这很好用.作为一个简单的例子(通过time.sleep()模拟冗长的计算)考虑
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.draw()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
pylab.draw()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
在python 2(版本2.7.3 vith matplotlib 1.1.1)中,代码运行干净而没有错误,但没有显示图.使用python2解释器进行一些试验和错误似乎建议用pylab.show()替换pylab.draw(); 这样做一次显然是足够的(不是,就像在绘图中每次更改/添加之后调用它一样).因此:
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.show()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
#pylab.draw()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
但是,这也不起作用.它再次运行干净,但没有显示数字.它似乎只在等待用户输入时这样做.我不清楚为什么会这样,但是当将raw_input()添加到循环中时,最终会显示该图
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.show()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
#pylab.draw()
time.sleep(1)
raw_input()
Run Code Online (Sandbox Code Playgroud)
有了这个,脚本当然会在显示情节时等待用户输入,并且在用户点击进入之前不会继续计算数据.当然,这不是意图.
这可能是由不同版本的matplotlib(1.1.1和1.2.x)或不同的python版本(2.7.3和3.2.3)引起的.
有没有办法用python 2和一个稳定的(1.1.1)matplotlib完成上面的脚本(第一个)在python …
我使用matplotlib绘制图表和图形.
当我使用命令绘制图表时,show()我的代码会阻止此命令.
我想用新数据刷新我的值列表,然后刷新背景图像.如何在没有每次关闭窗口的情况下关闭图表?以下是我正在使用的代码
import pylab
a = (1,2,3,4)
pylab.plot(a)
pylab.show() # blocks here
Run Code Online (Sandbox Code Playgroud) 我一直在努力让这个简单的脚本工作,但我所做的一切似乎都没有帮助.这是对Matplotlib网站上最基本的动画情节示例代码的略微修改,应该只显示几帧噪音(我的网站BTW的未经修改的代码也有同样的问题).
在我的带有TkAgg后端的计算机上,在绘图窗口冻结之前,我得到大约20帧(60个).使用Qt4Agg,我只得到一个冷冻的黑色窗口,并且根本没有绘制帧.我尝试过不同的NumPy,PyQt,Python和Matplotlib版本的多种组合,但总能得到相同的结果.
如果这对你有用或者看错了,请告诉我.我很确定这在过去确实有效,所以我认为这可能是Windows问题或与之相关的问题ion().
仅供参考我正在使用Windows 7(32位),我已经使用Python 2.6/2.7,MPL 1.0.0/0.9.9.8,PyQt 4.6/4.7,Numpy 1.4/1.5b进行了测试.
import matplotlib
matplotlib.use('TkAgg') # Qt4Agg gives an empty, black window
from pylab import *
import time
ion()
hold(False)
# create initial plot
z = zeros(10)
line, = plot(z)
ylim(-3, 3)
for i in range(60):
print 'frame:', i
d = randn(10)
line.set_ydata(d)
draw()
time.sleep(10e-3)
Run Code Online (Sandbox Code Playgroud)
这个更简单的版本在前几帧之后也会冻结:
from pylab import *
ion()
hold(False)
for i in range(40):
plot(randn(10))
draw()
show()
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:这些人似乎和我有相同或类似的问题:
看起来他们中的任何一个都不能解决它:(