Как построить график pyqtgraph с несколькими осями Y

Стандартный график выглядит вот так:

введите сюда описание изображения

Вопрос можно ли построить график с двумя осями Y? введите сюда описание изображения


Ответы (1 шт):

Автор решения: S. Nick

Все можно:

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


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(264, 248)
        MainWindow.setMinimumSize(QtCore.QSize(264, 248))
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 264, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))    
        self.pushButton.setText(_translate("MainWindow", "PushButton"))


class ThrowWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

    def setupUi(self, MainWindow):
        pg.mkQApp()

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

        self.p2 = pg.ViewBox()
        self.p1.showAxis('right')
        self.p1.scene().addItem(self.p2)
        self.p1.getAxis('right').linkToView(self.p2)
        self.p2.setXLink(self.p1)
        self.p1.getAxis('right').setLabel('axis2', color='#0000ff')

        self.p3 = pg.ViewBox()
        ax3 = pg.AxisItem('right')
        self.p1.layout.addItem(ax3, 2, 3)
        self.p1.scene().addItem(self.p3)
        ax3.linkToView(self.p3)
        self.p3.setXLink(self.p1)
        ax3.setZValue(-10000)
        ax3.setLabel('axis 3', color='#ff0000') 

        def updateViews():
            self.p2.setGeometry(self.p1.vb.sceneBoundingRect())
            self.p3.setGeometry(self.p1.vb.sceneBoundingRect())
            self.p2.linkedViewChanged(self.p1.vb, self.p2.XAxis)
            self.p3.linkedViewChanged(self.p1.vb, self.p3.XAxis)

        updateViews()
        self.p1.vb.sigResized.connect(updateViews)
        self.p1.plot([10,20,40,80,40,20],[1,2,4,8,16,32])
        self.p2.addItem(pg.PlotCurveItem(
            [10,20,40,80,40,20],[12,13,14,15,16,17], pen='b'))
        self.p3.addItem(pg.PlotCurveItem(
            [10,20,40,80,40,20],[32,16,8,4,2,1], pen='r'))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):                                         
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.lanzar_grafica_3_ejes)

    def lanzar_grafica_3_ejes(self):    
        self.throw_to_basket = ThrowWidget()
        self.throw_to_basket.setupUi(self.throw_to_basket)    
        self.gridLayout.addWidget(self.throw_to_basket.pw, 1, 0, 1, 5)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    w.resize(630, 550)
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка