加速Matplotlib

5

目前我正在处理实时绘图,但可视化非常缓慢。我想知道 Matplotlib 中一般可以做些什么来加速绘图:

  • 后端对性能有何影响?是否有比其他后端更适合实时绘图的后端?
  • 我可以降低分辨率以增加 FPS 吗?
  • 如果我减小窗口大小,为什么绘图的 FPS 会提高?为什么如果我切换到全屏模式,FPS 会急剧下降?

我也试图关闭所有不必要的东西:

ax.set_xticklabels(())
ax.set_yticklabels(())
ax.set_xticks([])
ax.set_yticks([])
ax.axis('off')
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

然而,这种影响可以忽略不计。我还能关闭更多的东西吗?

我也想知道是否可以关闭创建图表时打开的窗口上的按钮(主页按钮等)。关闭这些按钮能增加速度吗?

enter image description here

我还发现做以下操作:

fig.canvas.draw_idle()
fig.canvas.start_event_loop(1e-9)

相对于更新图表而言,它速度较慢

fig.canvas.draw_idle()
self.fig.canvas.update()
self.fig.canvas.flush_events()

有更好的方法更新图中的对象吗?

尝试通过多线程利用你的CPU。 - CuCaRot
你能给一个简单的例子吗?你会使用Python的多进程工具箱来绘制对象吗? - Gilfoyle
1个回答

1
后端如何影响性能?有些后端比其他后端更适合实时绘图吗?
后端发挥两个作用:首先,它呈现所有内容,因此渲染得越快,输出就越快。其次,所使用的GUI工具包可能会起到作用,因为它可能会限制更新画布的速度。例如,“Qt5Agg”似乎比“TkAgg”更快。
我可以降低分辨率以增加FPS吗?
您可以缩小图形,或使用较小的dpi。这两种方法都会减少需要绘制的像素数量,从而加快绘制速度。
为什么如果我减小窗口大小,我的绘图FPS会增加?为什么如果我切换到全屏模式,FPS会急剧下降?
如上所述,需要在屏幕上绘制更多的像素意味着渲染速度更慢。
还有其他东西可以关闭吗?
我们不知道您的代码中有什么,因此我们无法知道要关闭什么。
关闭这些按钮可能会增加速度吗?
不会。

最后,fig.canvas.draw_idle()本身应该足以更新绘图,因为通常您已经运行了事件循环。重新启动事件循环没有帮助。


谢谢您的回答。我尝试使用 rcParams["figure.dpi"] = 50 降低分辨率。然而,现在许多对象变得更小了。我该如何正确地降低需要绘制的像素数量? - Gilfoyle
1
这就是减小图像尺寸或dpi的目的。如果没有该问题的具体 [mcve],我认为这不会导致任何进展。 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接