gpt4 book ai didi

python - python 2、matplotlib 1.1.1 中的 pylab.ion() 以及在程序运行时更新绘图

转载 作者:IT老高 更新时间:2023-10-28 20:34:12 24 4
gpt4 key购买 nike

我想做的是让脚本计算一些东西,准备一个图并将已经获得的结果显示为 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)

在 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)

但是,这也不起作用。同样,它运行干净但不显示图形。似乎只有在等待用户输入时才会这样做。我不清楚这是为什么,但是当将 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()

有了这个,脚本当然会在显示绘图时等待用户输入,并且在用户点击输入之前不会继续计算数据。当然,这不是本意。

这可能是由不同版本的 matplotlib(1.1.1 和 1.2.x)或不同的 python 版本(2.7.3 和 3.2.3)引起的。

有什么方法可以用稳定的(1.1.1)matplotlib 来完成上面的脚本(第一个)在 python 3,matplotlib 1.2.x 中的作用:- 在循环或迭代函数中计算数据(这需要一段时间,在上面的例子中由 time.sleep() 模拟)和-(仍在计算中)显示在之前的迭代中已经计算过的内容- 并且不打扰用户不断点击输入以继续计算

谢谢;我会很感激任何帮助...

最佳答案

您希望 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'

您不需要每次通过都创建一个新的 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.

一个真正过度杀戮的方法是使用 matplotlib.animate 模块。另一方面,它为您提供了一种保存数据的好方法(摘 self 对 Python- 1 second plots continous presentation 的回答)。

example , api , tutorial

关于python - python 2、matplotlib 1.1.1 中的 pylab.ion() 以及在程序运行时更新绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12822762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com