一个图形上有多个动画子图[以编程方式]

2024-09-29 17:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为每个数据设置ax,我希望在一个图形中为每个数据设置不同子块的动画。我尝试了一些代码块,但我无法处理动画数据。事实上,我可以,但只是最后一个子地块动画

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()

我期望通过编程方式创建ax,而不是创建变量和所有单独的子批动画

编辑:(工作代码)

注意:Player(link)也经过测试。成功了

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()

Tags: inforframeslendeffigrange动画

热门问题