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) 中绘制第一帧后,数据不再更新或绘制:

enter image description here


尝试解决

除了使用 plt.show() 之外,我发现使这项工作起作用的唯一方法是取消注释 update(frame_no) 中的第二行:

# ln,'ro')# ln,'ro')

但是,启用上述行会导致 FPS 急剧下降,与没有 blitting 的性能大致相同。

我也尝试过使用不同的后端。


为什么会这样?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...