我想创建一个包含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()
它向我显示了情节,但没有更新