2014-04-25 34 views
0

假设我有两个视图\绘制在pyqtgraph创建,然后他们被链接。 使用线链接到查看更改轴范围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_() 
+0

你还没有完全指定你想要的行为:1)你是否希望两个视图总是显示相同的比例(所以'xmax1-xmin1 == xmax2-xmin2'),或者你只是想要scale * changes * in一种观点可以反映在另一种观点中? 2)如果我放大一个视图,那么其他视图应该放大到什么点才能匹配?通常缩放是在鼠标点击点附近,但对于其他视图来说,这是没有意义的。 – Luke

+0

所以我在脑海里想的是: 1.两个视图都不应该显示相同的比例。它应该像他们应该有适合的视图来显示情节。在我给出的例子中,如果有一个情节在看,那么另一个情节就会消失。因此,我认为应该将其中一个状态改变为另一个状态。 2.嗯,我认为我的痛点是w.r.t.第一种情况。第二种情况,如果它困扰你w.r.t.然后请让我知道更多的细节,以便我可以就此提供进一步的意见。 – Versatile

回答

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 

有一个问题,但是,你需要知道两件事情缩放时:多少规模的(这是两种观点一样,所以不是问题),并围绕什么点来规模(这是不同的意见,所以有点难以确定)。解决方案取决于你想要的行为。

+0

这是解决问题的开始。感谢指针 – Versatile