2014-04-25 36 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