Pracuję nad analizą obrazu i chcę utworzyć animację ostatecznych wyników, która zawiera sekwencję czasową danych 2D i wykres sekwencji czasowych w jednym pikselu, tak, że aktualizacja 1D jest aktualizowana w miarę postępu animacji 2D. Następnie ustaw je w subpocie obok siebie. Poniższy link ma obraz końcowego efektu, który najlepiej byłoby animować.Animacja z użyciem matplotlib z subplots i ArtistAnimation
Wciąż dostaję błąd: AttributeError: 'list' obiekt ma atrybut 'set_visible'. Przeszukałem go (tak jak to robię) i natknąłem się na http://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-vs-contour-plots-td18703.html, gdzie jeden facet przebija kod, aby ustawić atrybut set_visible. Niestety polecenie fabuły nie ma takiego atrybutu, więc nie mam pojęcia, w jaki sposób mogę wyprodukować animację. Załączam łatkę małpie w poniższym minimalnym przykładzie roboczym (skomentowałem), a także drugi "im2", który jest również komentowany, który powinien działać dla każdego, kto próbuje uruchomić kod. Oczywiście da ci dwie animacje fabularne 2D. Minimal przykładem pracy jest następujący:
#!/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()
Byłem też ciekaw, czy ktoś wiedział o chłodnym sposób podkreślenia piksel, że dane 1D jest wyodrębniony z, lub nawet narysować linię od piksela do najbardziej prawy podplot, aby były w pewien sposób "połączone".
Adrian
Losowa wskazówka, można użyć 'rys, (ax1, ax2) = plt.subplots (1, 2)', aby zapisać dwie linie – Mark