如何在不同图表之间共享 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轴方向相反