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

How can I share a pyqtgraph plot between different graphs?

我刚开始使用 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 window 上显示 plot2 线。这里的问题是当你使用:

graph1.plotItem.addItem(item = plot2)

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

问题与解释

正如您所说,您所使用的方法根本就是错误的。

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

一个解决方案

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

注意: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