我想创建一个动画叠加条形图。
有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)
是否有替代选项,遵循链接的样式,这样我每次都不必清除轴?感谢。
答案 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]
的输出将为您提供可以设置的所有潜在属性。