0

假设我在 pyqtgraph 中创建了两个视图\绘图,然后将它们链接起来。使用线条

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_()
4

1 回答 1

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

但是,有一个问题,您需要在缩放时知道两件事:缩放多少(这对于两个视图都是相同的,所以不是问题),以及围绕什么点进行缩放(这在视图之间是不同的,所以更难确定)。解决方案取决于您想要的行为。

于 2014-04-28T15:43:46.667 回答