Анимация с использованием matplotlib с подзаголовками и ArtistAnimation
Я работаю над анализом изображений, и я хочу создать анимацию конечных результатов, которая включает в себя временную последовательность 2D-данных и график временных последовательностей в одном пикселе, так что график 1D обновляется по мере продвижения 2D-анимации. Затем установите их в подзаголовке бок о бок ссылка ниже имеет изображение конечного результата, который в идеале будет анимирован.
Я продолжаю получать ошибку: 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
что касается вас второй вопрос, мы стараемся иметь только один вопрос на поток, поэтому, пожалуйста, откройте новый вопрос.