сюжет pyqtgraph с многоосями - PullRequest
       27

сюжет pyqtgraph с многоосями

0 голосов
/ 30 сентября 2019

Я использую pyqtgraph для построения 2 кривых (кривая 1 и кривая 2) с одной осью X и двумя осями Y, Y1 (слева) и Y2 (справа). Как я могу связать кривую 1 с осью Y1 и кривую 2 с осью Y2. Если я перемещаюсь или увеличиваю ось Y1 (соответственно Y2), должна двигаться только кривая 1 (соответственно Y2). Если я перемещаю или масштабирую область графика, оси X, Y1 и Y2 должны адаптироваться. Заранее спасибо. Код:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
#This example uses pyqtgraph to display a graph with 2 random curves.

import pyqtgraph.Qt
import numpy as np
import pyqtgraph

class To_Plot:
    def __init__(self, eo_win):
        self.ao_win = eo_win
        pyqtgraph.setConfigOptions(antialias=True)

    def create_plot(self):
        self.axisY1 = pyqtgraph.AxisItem(orientation='left')   # Y1 axis
        self.axisY2 = pyqtgraph.AxisItem(orientation='right')  # Y2 axis

        self.plt1 = self.ao_win.addPlot(title="Updating plot")
        self.plt1.showAxis('left')
        self.plt1.showAxis('right')

        self.curve1 = self.plt1.plot(pen=(255,0,0))     # Red curve
        self.curve2 = self.plt1.plot(pen=(0,255,0))     # Green curve
        self.data1 = np.random.normal(size=(10,1000))
        self.data2 = np.random.normal(size=(10,1000))

        self.ptr = 0

    def update_plot(self):
        self.curve1.setData(self.data1[self.ptr%10])
        self.curve2.setData(self.data2[self.ptr%10])
        if self.ptr == 0:
            self.plt1.enableAutoRange('xy', False)  # Stop auto-scaling after the first data set is plotted
        self.ptr += 1

    def init_timer(self):
        self.timer = pyqtgraph.Qt.QtCore.QTimer()
        self.timer.timeout.connect(self.update_plot)
        self.timer.start(50)

#------------------------------------------------------------------------
#Create the main window.
#Return the main window created.
def create_main_win():
    vo_win = pyqtgraph.GraphicsWindow(title="Basic plotting examples")
    vo_win.resize(1200,600)
    vo_win.setWindowTitle('pyqtgraph example: Plotting')
    return vo_win

def main():
    import sys

    # Create the application and the main window
    vo_app = pyqtgraph.Qt.QtGui.QApplication([])
    vo_win = create_main_win()

    # Create the plot
    vo_plot1 = To_Plot(vo_win)
    vo_plot1.create_plot()
    vo_plot1.init_timer()

    pyqtgraph.Qt.QtGui.QApplication.instance().exec_()

if __name__ == '__main__':
    main()

...