【发布时间】:2017-07-12 04:48:25
【问题描述】:
我有一个 python 程序,可以将文件中的数据绘制为该文本文件中每一行的等高线图。目前,我的界面中有 3 个单独的等高线图。不管我是从文件中读取数据还是在执行脚本之前将其加载到内存中,我只能从等高线图中获得约 6fps 的数据。
我也尝试只使用一个等高线和其他正常图,但速度仅提高到 7fps。我不相信画几条线在计算上会如此繁重。有没有办法让它大大加快速度?理想情况下,获得至少 30fps 会很好。
我绘制轮廓的方式是,对于我的每一行数据,我都会删除前一行:
for coll in my_contour[0].collections:
coll.remove()
并添加一个新的
my_contour[0] = ax[0].contour(x, y, my_func, [0])
在代码的开头,我有 plt.ion() 在添加时更新图。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
更新绘图的速度取决于两件事:(a) 计算新数据所需的时间和 (b) 绘制坐标轴所需的时间。一般来说,很难说在你的情况下哪一个需要更多时间。不幸的是,
contour需要在每次迭代中重新计算数据,因此预期收益不大。使用 blitting 可能会减少绘制时间,但我怀疑这会将您的速度从 7 fps 提高到 30 fps。 -
好吧,添加更多轮廓并不会大幅降低 fps。现在我尝试了 6 个轮廓,我得到了 5.5-6.5 fps,当我得到 7-7.5fps 时,matplotlib 中发生了一些事情,当它更新需要永远进行动画处理的绘图时。此外,如果我大幅降低等高线图的网格密度,它只会将帧速率提高几分之一 fps。
-
这听起来像blitting 确实可以提供优势。
-
@ImportanceOfBeingErnest 与链接建议不同,我不能在等高线图上使用
ax[0].draw_artist(my_contour[0])。它给了我一个错误。如果我按照那里的说明做所有其他事情,除了ax[0].draw_artist(my_contour[0])我使用fig.canvas.draw()我会增加 2fps。我应该如何使用等高线图正确处理 blitting?
标签: python matplotlib plot contour