如何设置在Python中更新的条形码的动画

时间:2016-07-07 10:33:20

标签: python animation matplotlib

我想创建一个动画叠加条形图。

great tutorial,其中显示了如何为折线图设置动画。

但是,对于动态条形图,BarContainer对象没有“set_data”的任何属性。因此,我每次都被迫清除数字轴,例如,

fig=plt.figure()

def init():
    plt.cla()

def animate(i):

    p1 = plt.bar(x_points,y_heights,width,color='b')

return p1


anim = animation.FuncAnimation(fig,animate,init_func=init,frames=400,interval=10,blit=False)

是否有替代选项,遵循链接的样式,这样我每次都不必清除轴?感谢。

2 个答案:

答案 0 :(得分:1)

您需要在plt.bar之外拨打animation(),在新数据进入时用Rectangle.set_height更新每个柱的高度。

在实践中,循环使用plt.bar()返回的矩形列表压缩的每个传入的y_heights集合,如下所示。

p1 = plt.bar(x_points,y_heights,width,color='b')

def animate(i):
    for rect, y in zip(p1, y_heights):
        rect.set_height(y)

anim = animation.FuncAnimation(fig,animate,init_func=init,frames=400,interval=10,blit=False)

您可能希望将p1放入init(),但这取决于您!

这个答案的所有功劳都归功于unutbu在相关问题Updating a matplotlib bar graph?中的回答。我会在评论中添加,但我显然很新。

答案 1 :(得分:0)

plt.bar返回一个矩形列表。列表的长度等于条的数量。如果你想改变第一个栏的高度,你可以p1[0].set_height(new_height)width以及其他一些矩形属性类似。

如上所述here[x for x in dir(p1[0]) if 'set_' in x]的输出将为您提供可以设置的所有潜在属性。