pyqtgraph:在不同的绘图中对齐xax的刻度

2024-10-03 17:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

这是this question的后续操作。在

问题是当其中一个图被重缩放时,如何适应多个pyqt图的x轴缩放。我希望得到的结果是所有图的刻度都完全对齐,这样就可以直接比较两个图的内容。在

给出的答案记录了这个任务,即根据变化重新调整图的大小,但当图的内容不同时,y轴的描述往往大小不同,这会使一切变得混乱。在

例如,在下面的图片中,我调整了底图,使其大致覆盖0-100的范围。奇怪的是上面的图显示了更大的间隔。在

有什么办法在调整刻度时调整刻度吗?在

enter image description here

示例源代码:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
from pyqtgraph.dockarea import *
import sys


def onSigRangeChanged(r):
    w1.sigRangeChanged.disconnect(onSigRangeChanged)
    w2.sigRangeChanged.disconnect(onSigRangeChanged)
    if w1==r:
        w2.setRange(xRange=r.getAxis('bottom').range)
    elif w2 == r:
        w1.setRange(xRange=r.getAxis('bottom').range)

    w1.sigRangeChanged.connect(onSigRangeChanged)
    w2.sigRangeChanged.connect(onSigRangeChanged)

app = QtGui.QApplication(sys.argv)

win = QtGui.QMainWindow()
area = DockArea()
win.setCentralWidget(area)
win.resize(1000,500)
win.setWindowTitle('pyqtgraph example: dockarea')


d1 = Dock("Dock1")
d2 = Dock("Dock2")
area.addDock(d1, 'bottom')
area.addDock(d2, 'bottom', d1)

w1 = pg.PlotWidget(title="Dock 1 plot")
w1.plot(np.random.normal(size=100)*1e12)
w1.plotItem.showGrid(x=True,y=True,alpha=1)
d1.addWidget(w1)

w2 = pg.PlotWidget(title="Dock 2 plot")
w2.plot(np.random.normal(size=100))
w2.plotItem.showGrid(x=True,y=True,alpha=1)
d2.addWidget(w2)

w1.sigRangeChanged.connect(onSigRangeChanged)
w2.sigRangeChanged.connect(onSigRangeChanged)

win.show()

sys.exit(app.exec_())

Tags: importtrueplotconnectareawinw1d1
1条回答
网友
1楼 · 发布于 2024-10-03 17:25:12

我刚在this问题中找到了答案。在

我们可以通过w2.setXLink(w1)直接链接轴刻度,而不是连接到sigRangeChanged事件。当然,我们必须移除与sigRangeChanged的连接,否则鳞片就会飞到天上。下面是示例代码:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
from pyqtgraph.dockarea import *
import sys

app = QtGui.QApplication(sys.argv)

win = QtGui.QMainWindow()
area = DockArea()
win.setCentralWidget(area)
win.resize(1000,500)
win.setWindowTitle('pyqtgraph example: dockarea')


d1 = Dock("Dock1")
d2 = Dock("Dock2")
area.addDock(d1, 'bottom')
area.addDock(d2, 'bottom', d1)

w1 = pg.PlotWidget(title="Dock 1 plot")
w1.plot(np.random.normal(size=100)*1e12)
w1.plotItem.showGrid(x=True,y=True,alpha=1)
d1.addWidget(w1)

w2 = pg.PlotWidget(title="Dock 2 plot")
w2.plot(np.random.normal(size=100))
w2.plotItem.showGrid(x=True,y=True,alpha=1)
w2.setXLink(w1)
d2.addWidget(w2)

win.show()

sys.exit(app.exec_())

相关问题 更多 >