每帧实时Matplotlib Function动画

时间:2019-06-04 14:36:53

标签: python matplotlib animation plot

我想创建一个包含4个子图的图形,该图形每帧更新一次。特别是只有ax4会被更新,而其他的则是静态的。现在我正在使用plt.pause(0.0001),但它似乎有点慢。我知道使用Function Animation和blit = True可以使速度更快。 我的代码现在是这样的:

 fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2,  figsize=(4,5))

 img1 = np.zeros((224,224,3))
 img2 = np.zeros((224,224, 3))


 #create two image plots
 im1 = ax1.imshow(img1)
 im2 = ax2.imshow(img2)

 im3 = ax3.bar(y_pos, performance, align='center', alpha=0.5)
 im4 = ax4.bar(y_pos, performance, align='center', alpha=0.5)

 plt.ion()

 cap = cv2.VideoCapture(0)

 while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    .
    .
    .

    im1.set_data(old_image)
    im2.set_data(new_image)



    ax3.bar(y_pos, performance, align='center', alpha=0.5)
    bars = ax4.bar(y_pos, performance, align='center', alpha=0.5)
    plt.pause(0.0001)
    bars.remove()
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])

如何修改它,这样我就不需要使用plt.pause了,并且可以通过FunctionAnimation使其更快?

更新: 我使用FunctionAnimation修改了代码,但仍然遇到问题。我删除了plt.ion()并添加了更新功能:

def update(y_pos, performance):
   ax4.bar(y_pos, performance, align='center', alpha=0.5)

while (True):
   im1.set_data(old_image)
   im2.set_data(new_image)
   ax3.bar(y_pos, performance, align='center', alpha=0.5)
   bars = ax4.bar(y_pos, performance, align='center', alpha=0.5)
   callback_lambda = lambda x: update(y_pos,performance)
   ani = animation.FuncAnimation(plt.gcf(), callback_lambda)
   plt.show()

它向我显示了情节,但没有更新

0 个答案:

没有答案