2013-07-25 21 views
6

Bir görüntü analizi üzerinde çalışıyorum ve 2B verilerinin zaman dizisini ve tek bir pikselde zaman dizilerinin bir grafiğini içeren son sonuçların bir animasyonunu oluşturmak istiyorum. 2D animasyon ilerledikçe 1D çizim güncellemeleri. Sonra bunları bir alt-çizimde yan yana ayarlayın. Aşağıdaki linkte, ideal olarak canlandırılacak olan bir sonuç görüntüsü bulunur.Altpipler ve ArtistAnimation ile matplotlib kullanılarak animasyon

enter image description here

bir hata almaya devam: AttributeError: 'Liste' nesne 'set_visible' hayır özelliği vardır. Ben (sizin yaptığınız gibi) googled ve bir adam ördek set_visible özniteliği ayarlamak için kod yumruklar nerede http://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-vs-contour-plots-td18703.html tökezledi. Ne yazık ki, çizim komutu böyle bir özelliğe sahip gibi görünmüyor, bu yüzden animasyonu nasıl üretebileceğime dair bir kayıp yaşıyorum. Aşağıda belirtilen minimum çalışma örneğinde maymun yama ekledim (yorumda bulundu) ve aynı zamanda kod çalıştırmaya çalışan herkes için çalışması gereken ikinci bir 'im2'. Açıkçası size iki 2D çizim animasyonları verecektir. Herkes piksele bir çizgi çizin da 1D veriler elde olan pikseli vurgulamak veya serin şekilde tanıyıp tanımadığı için

#!/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() 

Ayrıca meraklı aşağıdaki gibidir: En az bir çalışma örneği en sağdaki subplot, böylece bir şekilde 'birbirine' bağlanırlar. Adrian

+1

Rastgele ipucu, iki satırdan tasarruf için 'fig, (ax1, ax2) = plt.subplots (1, 2)' yi kullanabilirsiniz. – Mark

cevap

15

plot

(hata listesi bahsediyor dolayısıyla neden) sanatçıların bir listesini döndürür. Böylece lines = plot(x1, y1, x2, y2,...) gibi plot'u arayabilirsiniz.

Değişim

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

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

virgül un-paketlerini im2 ikinci soruya gelince

, biz deneyin içine uzunluğu bir liste ekleme sadece tek bir soru başına sahip SO üzerindeki konuya lütfen yeni bir soru açın.

+2

Orijinal yazar hakkında bir şey bilmiyorsunuz, ama bu benim için harika bir yanıttı. Şerefe. – dmon