Анимация с использованием matplotlib с подзаголовками и ArtistAnimation

Я работаю над анализом изображений, и я хочу создать анимацию конечных результатов, которая включает в себя временную последовательность 2D-данных и график временных последовательностей в одном пикселе, так что график 1D обновляется по мере продвижения 2D-анимации. Затем установите их в подзаголовке бок о бок ссылка ниже имеет изображение конечного результата, который в идеале будет анимирован.

enter image description here

Я продолжаю получать ошибку: AttributeError: объект "list" не имеет атрибута 'set_visible'. Я погуглил (как и вы) и наткнулся на 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()

мне также было любопытно, знал ли кто-нибудь классный способ выделить пиксель, из которого извлекаются данные 1D, или даже нарисовать линию от пикселя до самого правого подзаголовка, чтобы они были "связаны" каким-то образом.

Эдриан

1 ответов


plot возвращает список исполнителей (следовательно, почему ошибка ссылается на список). Это так, что вы можете позвонить plot как lines = plot(x1, y1, x2, y2,...).

изменить

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

to

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

добавление запятой распаковывает список длины один в im2

что касается вас второй вопрос, мы стараемся иметь только один вопрос на поток, поэтому, пожалуйста, откройте новый вопрос.