gpt4 book ai didi

python - Matplotlib 动画多行和文本

转载 作者:太空狗 更新时间:2023-10-30 01:02:00 27 4
gpt4 key购买 nike

感谢您花时间阅读我的问题,这是我第一次在 SO 上发帖,所以这里...

我正在使用 matplotlib.animation.FuncAnimation 在动画中绘制时间序列数据

我通过遍历列表并从 numpy 数组中切片数据来绘制多条线。这很好用,但我还想在动画情节中添加文本并描述帧数。

我在下面包含了示例代码。

我正在尝试从动画函数返回一个线条对象列表一个文本对象。当我尝试执行此操作时收到属性错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
return self.func(*args)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 531, in callit
func(*args)
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 141, in _on_timer
TimerBase._on_timer(self)
File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 1117, in _on_timer
ret = func(*args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 773, in _step
still_going = Animation._step(self, *args)
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 632, in _step
self._draw_next_frame(framedata, self._blit)
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 652, in _draw_next_frame
self._post_draw(framedata, blit)
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 675, in _post_draw
self._blit_draw(self._drawn_artists, self._blit_cache)
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 688, in _blit_draw
if a.axes not in bg_cache:
AttributeError: 'list' object has no attribute 'axes'

但是,假设我有一个包含两个线对象的列表,如果我单独返回对象,例如

return lines[0],lines[1], timetext

我没有收到任何错误。

有什么想法吗?

干杯凡妮莎

import numpy
import matplotlib.pyplot as plt
import matplotlib.animation as animation

npdata = numpy.random.randint(100, size=(5,6,10))
plotlays, plotcols = [2,5], ["black","red"]

fig = plt.figure()
ax = plt.axes(xlim=(0, numpy.shape(npdata)[0]), ylim=(0, numpy.max(npdata)))
timetext = ax.text(0.5,50,'')

lines = []
for index,lay in enumerate(plotlays):
lobj = ax.plot([],[],lw=2,color=plotcols[index])[0]
lines.append(lobj)

def init():
for line in lines:
line.set_data([],[])
return lines

def animate(i):
timetext.set_text(i)
x = numpy.array(range(1,npdata.shape[0]+1))
for lnum,line in enumerate(lines):
line.set_data(x,npdata[:,plotlays[lnum]-1,i])
return lines, timetext

anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=numpy.shape(npdata)[1], interval=100, blit=True)

plt.show()

最佳答案

def animate(i):
timetext.set_text(i)
x = numpy.array(range(1,npdata.shape[0]+1))
for lnum,line in enumerate(lines):
line.set_data(x,npdata[:,plotlays[lnum]-1,i])
return lines, timetext # <- returns a tuple of form (list, artist)

将此更改为

     return tuple(lines) + (timetext,)

或类似的东西,以便您从 animate 返回艺术家的可迭代对象。

关于python - Matplotlib 动画多行和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624408/

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