Я устанавливаю топор для каждого из данных и хочу анимировать различные данные на разных подзадачах на рисунке. Я пробовал несколько блоков кода, но не могу обработать данные. На самом деле, я могу только анимировать последний субплот.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
a = [1,2,5]
if len(a)%2 == 0:
fig, axs = plt.subplots(int(len(a)/2),2)
else:
fig, axs = plt.subplots(int(len(a)/2)+1,2)
def barlist(n):
return [1/float(n*k) for k in range(1,6)]
n = 20 #Number of frames
x = range(1,6)
anim = list()
for idx, ax in enumerate(axs.flat):
ax.set_title(str(idx))
barcollection = ax.bar(x,barlist(1))
def animate(kj):
y=barlist(kj+1)
for l, b in enumerate(barcollection):
b.set_height(y[l]*a[idx-1])
anim.append(animation.FuncAnimation(fig, animate, repeat=True, blit=False, frames=n, interval=75))
plt.show()
Я ожидаю, что создать топор программно, не создавая переменную, а анимировать все отдельные субплоты.
Редактировать: (сработавшие коды)
Примечание. Проигрыватель ( ссылка ) также тестируется. Сработало!
colors=['blue', 'red', 'black', 'blue', 'purple']
subplot_list = [1,3,2,2,6]
leng = len(subplot_list)
ax, bars = list(), list()
def barlistdef(n):
return [1/float(n*k) for k in range(1,6)]
fig = plt.figure()
n = 20 # Number of frames
x = range(1,6)
for i in range(leng):
if leng == 1:
axis = fig.add_subplot(leng, 1, (i+1))
elif leng > 1:
if leng%2 == 0:
axis = fig.add_subplot(leng/2, 2, (i+1))
else:
axis = fig.add_subplot(int(leng/2+0.5), 2, (i+1))
ax.append(axis)
barcollection = ax[i].bar(x,barlistdef(1), color=colors[i])
bars.append(barcollection)
def animate(i):
y = barlistdef(i+1)
for j in range(len(bars)):
for k, bar in enumerate(bars[j]):
bar.set_height(y[k])
return barcollection
ani = animation.FuncAnimation(fig, animate, interval=75, frames=n, blit=False, repeat=True)
plt.show()