如何使用 PyQtGraph 获取堆栈图?
Posted
技术标签:
【中文标题】如何使用 PyQtGraph 获取堆栈图?【英文标题】:How to get a stackplot with PyQtGraph? 【发布时间】:2020-07-30 09:25:43 【问题描述】:Matplotlib 库中的stackplot
函数可以按如下方式使用:
import matplotlib.pyplot as plt
import numpy as np
import numpy.random as npr
x = np.linspace(0,10,50)
y = [npr.rand(50) for i in range(4)]
plt.stackplot(x,y)
plt.show()
我需要为一个项目使用 PyQtGraph 库:
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
import numpy as np
import numpy.random as npr
x = np.linspace(0,10,50)
y = [npr.rand(50) for i in range(4)]
win = pg.GraphicsWindow()
graph = win.addPlot()
#stackplot function
QtGui.QApplication.instance().exec_()
如何获得堆栈图?
【问题讨论】:
如果您想获得 X 或 Y 库的解决方案,那么您必须创建 2 个问题:每个库 1 个问题。在这种情况下,我已经删除了与 Vispy 相关的所有内容,您必须将它们放在另一个问题中。 【参考方案1】:Pyqtgraph 没有内置的堆栈绘图功能,但您可以自己编写,只需在要堆栈的每一行之前总结绘图数据,并使用 PlotCurveItem
的 fillLevel
和 fillBrush
参数.示例:
import pyqtgraph as pg
import numpy as np
data = np.random.normal(size=(7,10), scale=0.1, loc=1)
stacked = np.cumsum(data, axis=0)
plt = pg.plot()
for i,row in enumerate(stacked):
curve = plt.plot(row, fillLevel=0, fillBrush=(i,10))
curve.setZValue(10-i)
【讨论】:
我没有在我的问题中提到我想显示实时图。在您回答之前,我创建了一条曲线 y = 0,使用了 fills = [pg.FillBetweenItem(y, curve_1), ..., pg.FillBetweenItem(curve_n_minus_1, curve_n)] 和 graph.addItem(f) 来填充 f。我使用 graph.clear() 更新了图表,在每条曲线上设置数据,重新创建填充变量并在每次迭代时将 f 添加到图表中。您的解决方案与setData
相结合,速度提高了约 8 倍,非常感谢!以上是关于如何使用 PyQtGraph 获取堆栈图?的主要内容,如果未能解决你的问题,请参考以下文章
如何像使用 Dpi 一样在 pyqtgraph 中保存高质量的图形图像?