假设我在pyqtgraph中创建了两个视图\ plot,然后将它们链接起来。 使用行
p2.setYLink('Plot1')
p2.setXLink('Plot1')
问题是,当我们链接视图时,两个视图的范围相等,这会引起问题,因为一个绘图似乎过多地缩小或放大。 我们只想将视图链接在一起进行缩放,但不希望在绘图看起来发生变化时更改范围。
以下是直观解释问题的示例代码
import sys
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
#QtGui.QApplication.setGraphicsSystem('raster')
try:
app = QtGui.QApplication(sys.argv)
except RuntimeError:
app = QtCore.QCoreApplication.instance()
x1 = [1,2,3,4,5]
y1 = x1
x2 = [10,20,30,40,50]
y2 = x2
win = pg.GraphicsWindow(title="pyqtgraph example: Linked Views")
win.resize(800,600)
win.addLabel("Linked Views", colspan=2)
win.nextRow()
p1 = win.addPlot(x=x1, y=y1, name="Plot1", title="Plot1")
p2 = win.addPlot(x=x2, y=y2, name="Plot2", title="Plot2: Y linked with Plot1")
p2_state = p2.vb.getState()
p1_state = p1.vb.getState()
p2.setLabel('bottom', "Label to test offset")
p2.setYLink('Plot1') ## test linking by name
p2.setXLink('Plot1')
app.exec_()
答案 0 :(得分:1)
重述问题:您希望有两个视图可以具有不同的范围和比例,但是当您在一个视图中使用鼠标进行缩放时,另一个视图将缩放相同的量。
这不是 setXLink / setYLink方法的预期功能,因此您需要通过子类化或猴子修补视图框来实现它。例如:
import pyqtgraph as pg
p1 = pg.plot([1,6,2,4,3])
p2 = pg.plot([30,50,10,70,20])
def scaleBy(*args, **kwds):
pg.ViewBox.scaleBy(p1.plotItem.vb, *args, **kwds)
pg.ViewBox.scaleBy(p2.plotItem.vb, *args, **kwds)
p1.plotItem.vb.scaleBy = scaleBy
p2.plotItem.vb.scaleBy = scaleBy
然而,有一个问题是缩放时需要知道两件事:要缩放多少(两个视图都是一样的,所以不是问题),在什么点进行缩放(这在视图之间是不同的,因此更难以确定)。解决方案取决于您期望的行为。