【问题标题】:link to view changes axis range pyqtgraph链接以查看更改轴范围pyqtgraph
【发布时间】:2014-06-11 03:23:14
【问题描述】:

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

【问题讨论】:

  • 您还没有完全指定您想要的行为:1) 您是否希望两个视图始终显示相同的比例(所以xmax1-xmin1 == xmax2-xmin2),或者您只是想要比例更改 i> 在一个视图中反映在另一个视图中? 2)如果我缩放一个视图,那么另一个视图应该围绕什么点缩放以匹配?通常缩放是围绕鼠标单击点进行的,但对于其他视图,这是没有意义的。
  • 所以我想到的功能是: 1.两个视图不应该显示相同的比例。应该就像他们应该有适合显示情节的视图。在我给出的示例中,如果一个情节在视野中,那么另一个情节就会消失。所以我认为一个状态的改变应该反映在另一个中。 2.好吧,我认为我的痛点是w.r.t。第一种情况。这第二种情况如果它打扰你w.r.t。然后请让我知道更多细节,以便我可以就此提供进一步的意见。

标签: pyqtgraph


【解决方案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

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

【讨论】:

  • 这是解决问题的开始。感谢指点
猜你喜欢
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 2019-11-24
  • 2015-01-21
  • 2021-10-29
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多