2013-07-25 115 views
6

我正在進行圖像分析,我想創建一個動畫的最終結果,其中包括時間序列的2D數據和一個像素的時間序列圖,一維繪圖會隨着2D動畫的進展而更新。然後將它們並排放置在一個子圖中下面的鏈接具有最終結果的圖像,該圖像最好是動畫效果。動畫使用matplotlib與subplots和ArtistAnimation

enter image description here

我不斷收到一個錯誤:AttributeError的: '名單' 對象有沒有屬性 'set_visible'。我搜索了它(和你一樣),並偶然發現http://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-vs-contour-plots-td18703.html,其中一個人打鴨子的代碼設置set_visible屬性。不幸的是,plot命令似乎沒有這樣的屬性,所以我對如何生成動畫感到迷茫。我在下面的最小工作示例中包含了猴子補丁(註釋掉)以及第二個「im2」,它也被註釋掉了,它應該適用於任何試圖運行代碼的人。顯然它會給你兩個二維情節動畫。最小工作示例如下:

#!/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數據從提取出來的像素,甚至是從像素到畫一條線最右邊的子圖,以便以某種方式「連接」。

阿德里安

+1

隨機提示,你可以用'fig,(ax1,ax2)= plt.subplots(1,2)'保存兩行 – Mark

回答

15

plot返回藝術家(所以爲什麼錯誤指的是一個列表)的列表。這樣你就可以撥打plot,比如lines = plot(x1, y1, x2, y2,...)

變化

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

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

添加逗號未包裝的長度一個列表到im2

至於你的第二個問題,我們儘量只具有每一個問題因此,請開啓一個新的問題。

+2

不知道原作者,但這對我來說是一個很好的答案。乾杯。 – dmon