pyqtgraph 用于绘制多个数据列表

Posted

技术标签:

【中文标题】pyqtgraph 用于绘制多个数据列表【英文标题】:pyqtgraph for plotting multiple data lists 【发布时间】:2018-06-10 02:16:43 【问题描述】:

目前我正在使用matplotlib 绘制多个numpy 数据数组(或列表)。这些对应于大约 3000 个地块。这些图是时间序列。 我的问题是,当这些列表因大量数据而变得太大时,matplotlib 会非常慢。我读到pyqtgraph 的绘图速度非常快,但我的问题是:

您可以使用 pyqtgraph 绘制数据而不生成 pyqt 窗口,而是直接将它们保存到文件中吗? Matplotlib 有一个更改后端的选项,因此它不会产生窗口,而只是创建文件,pyqtgraph 有类似的东西吗?

您还认为,对于我的问题,pyqtgraph 是正确的方法吗?我经常看到实时绘制流数据,但我想做的不涉及实时流数据。我应该使用其他东西来为我的所有数据创建图表吗?

【问题讨论】:

什么意思:直接保存到文件中 因此,当 pyqtgraph 绘制某些东西时,它会生成一个窗口并向您显示绘制在 x 和 y 轴上的数据。我想要的是不创建此窗口,而只是将在该窗口中显示的图像保存到文件中。由于我有很多要创建的绘图并且我还想保存最终的图像文件,因此生成此窗口对我来说并不是一个真正的选择。 你有很多问题,你必须知道SO是每个帖子一个问题的地方,所以创建按钮说的是,而不是说s. 也许你没有正确理解我在问什么。我的问题是一个,并且是:pyqtgraph 可以在不使用生成的窗口的情况下创建多个图吗? 好的,现在我明白了,你可以展示一个简单的例子来说明你是如何在 matplotlib 中做到这一点的,我将使用这个例子在 pyqtgraph 中做到这一点;P 【参考方案1】:

如果要保存绘图的图像,则不需要显示窗口,示例如下:

import pyqtgraph as pg
import pyqtgraph.exporters

plt = pg.plot([1, 2, 3, 4, 5], [2, 5, 2, 5, 2])
exporter = pg.exporters.ImageExporter(plt.plotItem)
exporter.parameters()['width'] = 640
exporter.export('fileName.png')

虽然那个库有bug,但是解决方法很简单,一定要到文件pyqtgraph/exporters/ImageExporter.py

pyqtgraph
|
...
├── exporters
│   ├── ...
│   ├── ImageExporter.py
... ...

并更改第 70 行:

bg = np.empty((self.params['width'], self.params['height'], 4), dtype=np.ubyte)

到:

bg = np.empty((int(self.params['width']), int(self.params['height']), 4), dtype=np.ubyte)

文件名.png

参考资料:

http://www.pyqtgraph.org/documentation/exporting.html

【讨论】:

谢谢,试试看。【参考方案2】:

要关闭默认打开的窗口,您可以添加plt.win.close(),如下所示:

import pyqtgraph as pg
import pyqtgraph.exporters

plt = pg.plot([1, 4, 3, 9, 5], [2, 3, 2, 1, 0])
plt.win.close()
exporter = pg.exporters.ImageExporter(plt.plotItem)
exporter.parameters()['width'] = 640
exporter.export('fileName.png')

参考资料: http://www.pyqtgraph.org/documentation/exporting.html

【讨论】:

以上是关于pyqtgraph 用于绘制多个数据列表的主要内容,如果未能解决你的问题,请参考以下文章

绘制实时传感器数据时,PyQtGraph 停止更新并冻结

使用PyQtGraph绘制图形

PyQtGraph:问题循环通过绘制数据切片

用PyQtGraph绘制可视化数据图表

如何使用 PyQtGraph 提高速度并使用多个绘图拆分数据?

pyqtgraph删除pyqt4 gui中的持久图例