我想知道是否有人可以帮助我。我正在尝试在pyqtgraph中转换MultiplePlotAxes.py示例,以便所有轴都在右侧并对齐。这是我的代码,我添加了一个额外的图:

"""
Demonstrates a way to put multiple axes around a single plot.
(This will eventually become a built-in feature of PlotItem)
"""
#import initExample  ## Add path to library (just for examples; you do not need this)

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

pg.mkQApp()

pw = pg.PlotWidget()
pw.show()
pw.setWindowTitle('pyqtgraph example: MultiplePlotAxes')
p1 = pw.plotItem
p1.setLabels(left='axis 1')

## create a new ViewBox, link the right axis to its coordinate system
p2 = pg.ViewBox()
p1.showAxis('right')
p1.scene().addItem(p2)
p1.getAxis('right').linkToView(p2)
p2.setXLink(p1)
p1.getAxis('right').setLabel('axis2', color='#0000ff')

## create third ViewBox.
## this time we need to create a new axis as well.
p3 = pg.ViewBox()
ax3 = pg.AxisItem('right')
p1.layout.addItem(ax3, 2, 3)
p1.scene().addItem(p3)
ax3.linkToView(p3)
p3.setXLink(p1)
ax3.setZValue(-10000)
ax3.setLabel('axis 3', color='#ff0000')

## create forth ViewBox.
## this time we need to create a new axis as well.
p4 = pg.ViewBox()
ax4 = pg.AxisItem('right')
p1.layout.addItem(ax4, 2, 4)
p1.scene().addItem(p4)
ax4.linkToView(p4)
p4.setXLink(p1)
ax4.setZValue(-10000)
ax4.setLabel('axis 4', color='#2EFEF7')

## Handle view resizing
def updateViews():
    ## view has resized; update auxiliary views to match
    global p1, p2, p3, p4
    p2.setGeometry(p1.vb.sceneBoundingRect())
    p3.setGeometry(p1.vb.sceneBoundingRect())
    p4.setGeometry(p1.vb.sceneBoundingRect())

    ## need to re-update linked axes since this was called
    ## incorrectly while views had different shapes.
    ## (probably this should be handled in ViewBox.resizeEvent)
    p2.linkedViewChanged(p1.vb, p2.XAxis)
    p3.linkedViewChanged(p1.vb, p3.XAxis)
    p4.linkedViewChanged(p1.vb, p4.XAxis)

updateViews()
p1.vb.sigResized.connect(updateViews)

p1.plot([1, 2, 4, 8, 16, 32])
p2.addItem(pg.PlotCurveItem([1, 2, 4, 9, 16, 32], pen='b'))
p3.addItem(pg.PlotCurveItem([1, 2, 4, 7, 16, 32], pen='r'))
p4.addItem(pg.PlotCurveItem([1, 3, 5, 7, 17, 32], pen='c'))

## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys

    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()


这将产生以下图片,我添加了一个红色箭头来表示我想做什么。
python - 我如何使用pyqtgraph具有相同的对齐方式/位置的多个left axisItems?-LMLPHP

根据我能够确定的内容,可以使用pg.GraphicsLayout()进行此操作。但是,直接与plotItem相关联的axisItem与创建的axisItem不匹配,因为附着在plotitem上的那个较小。

这是我相信正在发生的事情的图片:

python - 我如何使用pyqtgraph具有相同的对齐方式/位置的多个left axisItems?-LMLPHP

这是我的问题,因为我希望它们全部对齐。在所附的代码中,您可以在右侧添加item(axes,2,1),但在左侧不起作用。有人知道我该怎么做吗?

在此先感谢您提供的任何帮助。

最佳答案

我遇到了同样的问题,看到这篇文章,对没有答案感到失望,但是我终于设法解决了一个问题,因此我想将其发布在这里。

如果您可以将右侧轴的代码发布出来,则可以对此进行修补,但基本上我所做的就是将底部轴附加到一行它自己的行上。

self.main_pI = pg.PlotItem()
self.axis_bottom = self.main_pI.getAxis('bottom')
self.axis_bottom.setLabel('Time (seconds)', color='#ffffff')
self.layout.addItem(self.main_pI, row=1, col=2, rowspan=2)
self.layout.addItem(self.axis_bottom, row=3, col=2, rowspan=2)


我是pyqtgraph的菜鸟,所以我敢肯定我会屠杀这个术语,但是我分离了“底”轴,并将其重新连接到布局上,使其在一行上独立存在。

希望能有所帮助。

关于python - 我如何使用pyqtgraph具有相同的对齐方式/位置的多个left axisItems?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42931474/

10-12 19:02