eines vorweg: Das folgende Programm hat keinen tieferen Sinn.
Es dient lediglich zu Übungszwecken.
Ich erstelle mit Qt-Designer eine GUI in dem sich ein graphicsView - Widget befindet.
Dieses wird als pyqtgraph PlotItem promotet und als gv1 angesprochen.
Ich möchte links und rechts eine Y-Achse mit unterschiedlichen Skalen haben.
Siehe Bild.
Dazu hab ich 2 Fragen:
1. Wie bekomme ich die Skalierung der linken Achse über die gesamte Achsenlänge?
2. Warum wird die Labelbeschriftung der rechten Achse fast aus dem Widget geschoben?
Bild:

Code: Alles auswählen
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtCore, QtGui, uic
import pyqtgraph as pg
from pyqtgraph import PlotWidget, plot
import sys
from random import randint
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
uic.loadUi('plot_test.ui', self)
self.setup()
def setup(self):
#gv.showGrid(x=True,y=True)
self.gv1.setYRange(0,100) # zeigt Brille
#self.gv1.setXRange(1,10)
# Startwerte
self.x = list(range(10))
self.y = [randint(0,10) for _ in range(10)]
# Achsen
self.gv1.showAxis('left')
yaxl = self.gv1.getAxis('left')
self.gv1.getAxis('left').setLabel('Temperatur', units='°C', color='r', **{'font-size':'14pt'})
self.gv1.getAxis('left').setPen(pg.mkPen(color= 'r', width = 1))
lticks = [10,12,14,16,18,20,22,24,26,28,30,32]
yaxl.setTicks([[(v, str(v)) for v in lticks]])
self.gv1.showAxis('right')
yaxr = self.gv1.getAxis('right')
yaxr.setWidth(100)
self.gv1.getAxis('right').setLabel('Luftfeuchte', units='%', color='c', **{'font-size':'14pt'})
self.gv1.getAxis('right').setPen(pg.mkPen(color= 'c', width = 1))
rticks = [0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
yaxr.setTicks([[(v, str(v)) for v in rticks]])
pen = pg.mkPen(color = ('b'), width = 1)
self.data_line = self.gv1.plot(self.x, self.y, pen = pen)
self.timer = QtCore.QTimer()
self.timer.setInterval(1500)
self.timer.timeout.connect(self.update_plot_data)
self.timer.start()
def update_plot_data(self):
# ersten y wert entfernen
self.x = self.x[1:]
# letzten x wert um 1 erhöhen
self.x.append(self.x[-1] + 1)
# ersten wert entfernen
self.y = self.y[1:]
# neuen Zufallswert anhängen
self.y.append(randint(0,100))
self.wert.setText(str(self.y[-1]))
# Update
self.data_line.setData(self.x, self.y)
#self.gv1.plot(self.x, self.y, pen='y', symbol='+')
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
main.ende.clicked.connect(main.close)
sys.exit(app.exec())
if __name__ == '__main__':
main()