我正在进行图像分析,想创建一个包含2D数据时间序列和单个像素时间序列的1D绘图的动画,使得1D绘图在2D动画进行时更新,并将它们设置为并排的子图。以下链接中有最终结果的图像,最好是动画。
我一直收到错误提示:AttributeError: 'list' object has no attribute 'set_visible'。我谷歌了一下(像你一样),然后偶然发现一个人在 http://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-vs-contour-plots-td18703.html 上使用代码暴力设置 set_visible 属性。不幸的是,绘图命令似乎没有这样的属性,所以我不知道如何产生动画效果。我在下面的最小工作示例中包括了这个 monkey patch(被注释掉了),还有另一个也被注释掉的 '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()
我也很好奇是否有一种酷炫的方法来突出显示提取1D数据的像素,甚至可以从像素绘制一条线到最右边的子图,以便它们在某种程度上“连接”起来。
Adrian
fig, (ax1, ax2) = plt.subplots(1, 2)
来节省两行代码。 - Mark