链接到查看更改轴范围pyqtgraph

时间:2014-04-25 12:07:06

标签: pyqtgraph

假设我在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_()

1 个答案:

答案 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

然而,有一个问题是缩放时需要知道两件事:要缩放多少(两个视图都是一样的,所以不是问题),在什么点进行缩放(这在视图之间是不同的,因此更难以确定)。解决方案取决于您期望的行为。