小编典典

使用matplotlib和子图和ArtistAnimation进行动画处理

python

我正在进行图像分析,我想创建一个最终结果的动画,其中包括2D数据的时间序列和单个像素上的时间序列图,以便1D图随着2D动画的进行而更新。然后将它们并排放置在子图中。下面的链接提供了最终结果的图像,最好将其设置为动画。

我不断收到错误消息:AttributeError:’list’对象没有属性’set_visible’。我在Google上搜索了一下(如您所愿),偶然发现了http://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-
vs-contour-plots-
td18703.html,其中有一个鸭鸭将设置set_visible属性的代码。不幸的是,plot命令似乎没有这样的属性,因此我对如何制作动画感到困惑。我已经在下面的最小工作示例(注释)中包含了猴子补丁,以及第二个“
im2”,该注释也被注释掉了,它对于尝试运行代码的任何人都应该有效。显然,它将为您提供两个2D绘图动画。最小的工作示例如下:

#!/usr/bin/env python

import matplotlib.pyplot as plt
import matplotlib.animation as anim
import numpy as np
import types

#create image with format (time,x,y)
image = np.random.rand(10,10,10)
image2 = np.random.rand(10,10,10)

#setup figure
fig = plt.figure()
ax1=fig.add_subplot(1,2,1)
ax2=fig.add_subplot(1,2,2)

#set up list of images for animation
ims=[]
for time in xrange(np.shape(image)[1]):
    im = ax1.imshow(image[time,:,:])
 #   im2 = ax2.imshow(image2[time,:,:])
    im2 = ax2.plot(image[0:time,5,5])
 #   def setvisible(self,vis): 
 #       for c in self.collections: c.set_visible(vis) 
 #    im2.set_visible = types.MethodType(setvisible,im2,None) 
 #    im2.axes = plt.gca()

    ims.append([im, im2])

#run animation
ani = anim.ArtistAnimation(fig,ims, interval=50,blit=False)
plt.show()

我也很好奇,是否有人知道一种很酷的方式来突出显示要从中提取一维数据的像素,或者甚至从像素到最右边的子图绘制一条线,以便它们以某种方式“连接”。

阿德里安


阅读 219

收藏
2020-12-20

共1个答案

小编典典

plot返回艺术家列表(因此,为什么错误指的是列表)。这样,您可以打电话plot一样lines = plot(x1, y1, x2, y2,...)

更改

 im2 = ax2.plot(image[0:time,5,5])

 im2, = ax2.plot(image[0:time,5,5])

添加逗号将长度为1的列表解压缩到 im2

至于您的第二个问题,我们试图在每个线程上只回答一个问题,因此请打开一个新问题。

2020-12-20