如何在不同图形之间共享 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
我刚开始使用 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