如何在不同图表之间共享 pyqtgraph 图?

Posted

技术标签:

【中文标题】如何在不同图表之间共享 pyqtgraph 图?【英文标题】:How can I share a pyqtgraph plot between different graphs? 【发布时间】:2021-05-10 21:23:32 【问题描述】:

我刚开始使用 pyqt5,正在开发 GUI,但在两个不同的图表之间共享绘图时遇到问题。让我更清楚地解释一下。假设您有一个 graph1 和一个 graph2:

graph1 = PlotWidget()
graph2 = PlotWidget()

然后您为这两个图创建两个单独的图:

plot1 = graph1.plot(name = 'plot1')
plot1.setData(x, y)
plot2 = graph2.plot(name = 'plot2')
plot2.setData(a, b)

您希望在这两个图表上显示绘图线。每个显示它自己的。现在您想在 graph1 窗口上显示 plot2 线。这里的问题是当你使用:

graph1.plotItem.addItem(item = plot2)

当我这样做时,plot2 确实出现在 graph1 上,但它从 graph2 中消失了。将其从 graph1 中移除也不会将其带回 graph2。我不明白这里有什么根本错误。我可以在两张图上显示相同的图吗?为什么我将它添加到graph1时它会从graph2中消失?

【问题讨论】:

【参考方案1】:

问题及说明

正如你所说,你用来做你想做的事的方法根本上是错误的。

plot() 方法创建一个PlotDataItem。这意味着当你这样做时:plot1 = graph1.plot(),你正在创建一个PlotDataItem 的实例并将它存储在变量plot1 中。 (阅读文档here) 顾名思义,PlotDataItem 是一个项目,一个单独的项目。如果您使用addItem() 方法将此项目“添加”到另一个PlotWidget,您将自动将其从另一个中删除并将其添加到命运小部件中。

解决方案

您可以创建PlotDataItem 的另一个实例,作为原始图的副本。您可以从任何小部件中添加 (addItem()) 和删除 (removeItem()) 它。您希望它显示相同的图,然后我建议创建一个在“复制图”的数据更改时触发的函数。这样,您可以拥有两个链接的 PlotDataItem 实例:一个用于其原始小部件,另一个用于在另一个小部件中添加/删除。

注意:removeItem() 方法不会删除项目,它只是从小部件中删除项目,这意味着您可以再次将其添加到任何其他小部件

如果您的数据不会更改,则无需创建链接图的函数。例如:

plot3 = pg.PlotDataItem(name = 'Copy of plot2')
plot3.setData(a, b)
graph1.addItem(plot3) ## To add the PlotDataItem to the PlotWidget
graph1.removeItem(plot3)  ## To remove the PlotDataItem from the PlotWidget

【讨论】:

以上是关于如何在不同图表之间共享 pyqtgraph 图?的主要内容,如果未能解决你的问题,请参考以下文章

Pyqtgraph:在同一个图形窗口中实时绘制两个图形相同的X轴但两个不同的Y轴方向相反

如何在 pyqtgraph 中写 \latex 字符?

如何在 Pyqtgraph 中设置图表的拉伸因子?

PyQtGraph:如何更改 ScrollArea 中图形的大小(高度和宽度)

PyQtGraph 在不同的屏幕未对齐轴中显示时

如何将附加的简单表格放置在 PyQtGraph 中