0ra*_*nge 22 python matplotlib
我想要做的是让脚本计算一些东西,准备一个绘图并将已经获得的结果显示为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 3中做的事情,matplotlib 1.2.x: - 计算数据(在上面的例子中需要一段时间)在循环或迭代函数中由time.sleep()模拟并且 - (同时仍然计算)显示在先前迭代中已经计算的内容 - 并且不打扰用户不断地按Enter键以继续计算以继续
谢谢; 我很感激任何帮助......
tac*_*ell 22
您希望该pause函数为gui框架提供重新绘制屏幕的机会:
import pylab
import time
import random
import matplotlib.pyplot as plt
dat=[0,1]
fig = plt.figure()
ax = fig.add_subplot(111)
Ln, = ax.plot(dat)
ax.set_xlim([0,20])
plt.ion()
plt.show()
for i in range (18):
dat.append(random.uniform(0,1))
Ln.set_ydata(dat)
Ln.set_xdata(range(len(dat)))
plt.pause(1)
print 'done with loop'
Run Code Online (Sandbox Code Playgroud)
Line2D每次传递都不需要创建新对象,只需更新现有数据即可.
文档:
pause(interval)
Pause for *interval* seconds.
If there is an active figure it will be updated and displayed,
and the gui event loop will run during the pause.
If there is no active figure, or if a non-interactive backend
is in use, this executes time.sleep(interval).
This can be used for crude animation. For more complex
animation, see :mod:`matplotlib.animation`.
This function is experimental; its behavior may be changed
or extended in a future release.
Run Code Online (Sandbox Code Playgroud)
一个真正过度杀死的方法是使用该matplotlib.animate模块.在另一面,它给你一个很好的方式来保存,如果你想(从我的答案翻录到数据Python-1秒地块连续呈现).
| 归档时间: |
|
| 查看次数: |
25997 次 |
| 最近记录: |