微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Matplotlib 图形在函数动画的第二帧后不更新轴上的数据?

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?