如何解决Matplotlib 图形在函数动画的第二帧后不更新轴上的数据?
以下代码用于说明目的:
# python 2.7
import cv2
import numpy as np
import matplotlib; matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig,ax = plt.subplots()
xdata,ydata = [],[]
ln,= ax.plot([],[],'ro')
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
def fig2img(fig_):
fig_.canvas.draw()
data = np.fromstring(fig_.canvas.tostring_rgb(),dtype=np.uint8,sep='')
return data.reshape(fig_.canvas.get_width_height()[::-1] + (3,))
def gen():
for i in range(5):
yield i
def update(frame_no):
print(frame_no)
# ln,= plt.plot([],'ro')
xdata.append(frame_no)
ydata.append(frame_no)
ln.set_data(xdata,ydata)
fimg = fig2img(fig)
if frame_no == 0:
cv2.imshow("first frame",fimg)
cv2.imshow("current frame",fimg)
return ln,ani = FuncAnimation(fig,update,frames=gen(),blit=True,interval=100,repeat=False)
# plt.show()
问题
对于我的应用程序,我需要使用 opencv 而不是通过 matplot 显示 matplot 图形图像。
我正在尝试利用 blitting 来提高数据绘图的速度。由于某种原因,在 update(frame_no) 中绘制第一帧后,数据不再更新或绘制:
尝试解决
除了使用 plt.show()
之外,我发现使这项工作起作用的唯一方法是取消注释 update(frame_no) 中的第二行:
# ln,'ro')
或 # ln,'ro')
但是,启用上述行会导致 FPS 急剧下降,与没有 blitting 的性能大致相同。
我也尝试过使用不同的后端。
为什么会这样?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。