Zweite x- Achse zu pyqtgraph.PlotWidget() hinzufügen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Zeile42
User
Beiträge: 7
Registriert: Montag 21. März 2022, 10:35

Hallo liebe Leute,

ich hätte eine frage:
Wie kann ich eine zweite x-Achse hinzufügen?

Was ich eigentlich machen/haben will ist, ich lese Daten über einen Seriellen Port ein. Die Daten sind mehrere Messwerte (samples) von verschiedenen Zeitpunkt und diese will ich in einem Plot darstellen. Bedeutet z.B.: y-Achse = Amplitude; x1-Achse: Frequenzen (also Mehrere); x2-Achse: Datum/Uhrzeit.
Prinzipiell will ich die FFT von mehreren Messungen zu unterschiedlichen Zeitpunkten in einem Plot darstellen
Ich messe alle 15min meinen Stromsignal, davon dann die FFT (z.B.:256 Samples) und diese Daten sende ich an den PC und will sie mittels Python/pyqt5 in einem Plot darstellen.
Hoffe man versteht was ich machen will.

Daher war meine Idee eine zweite x-Achse hinzuzufügen.

Hier mein Code für einen normalen Plot, wie bekomme ich da eine zweite Achse mit dem Datum-Uhrzeit hinzu, immer wenn die Messung nicht mehr vom selben Zeitpunkt ist.
Vermutlich muss ich die Ticks bei der x2 Achse dann auch entsprechend anpassen.

Code: Alles auswählen

class NewWindow5(QMainWindow):
    def __init__(self, plot5_data1, plot5_data2, dominant_frequency):
        super().__init__()

        self.setGeometry(100, 100, 1500, 900)
        self.setWindowTitle("FFT Computed magnitudes")

        hlay = QGridLayout(self)
        self.graphWidget = pg.PlotWidget()

        widget = QWidget()
        widget.setLayout(hlay)
        self.setCentralWidget(widget)
        self.bar_graph_item = pg.BarGraphItem(x=plot5_data2, height=plot5_data1, width=0.0)
        self.graphWidget.addItem(self.bar_graph_item)
        pos_x = max(plot5_data1)
        pos_y = 0
        text_df = "Dominant Frequency: " + dominant_frequency
        text = pg.TextItem(text_df, anchor=(0.5, 0.5))
        text.setPos(pos_y, pos_x)  # Position des Textes im Plot
        text.setFont(pg.QtGui.QFont("Arial", 10, pg.QtGui.QFont.Bold))  # Textformatierung
        # text.setFlag(text.GraphicsItemFlag.ItemIgnoresTransformations)
        self.graphWidget.addItem(text)
        hlay.addWidget(self.graphWidget, 0, 0)
Währe sehr dankbar wenn mir jemand helfen könnte.
Schönen Sonntag noch

Lg
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke nicht, dass das geht. Du willst ja eigentlich n plots mit einer kompletten X/Y-Achse (Frequenzen auf X) "einfach" zeitlich anordnen. Das ist einfach nicht ueblich, und wird denke ich nicht unterstuetzt werden.

Du kannst probieren, die einzelnen Spektren unabhaengig zu rendern, und dann als Bilder auf einer Zeitachse anzuordnen. Oder als Hack die Bins auf bestimmte Zeitpunkte mappen, aber dann werden natuerlich keine Frequenzen an der X-achse sichtbar.
Weißnix
User
Beiträge: 1
Registriert: Dienstag 28. November 2023, 11:11

Doch, geht:

Code: Alles auswählen

  
    w.tempWidget.getAxis('bottom').setPen('#b0b0b0')             # Farbe der X - Achse
    w.tempWidget.getAxis('bottom').setStyle(tickFont=font)     # Schriftart der X - Achse - ticks setzen
    w.tempWidget.getAxis('bottom').setTextPen('#b0b0b0')      # Farbe der Schrift der X - Achse - ticks setzen
    w.tempWidget.getAxis('top').setPen('#b0b0b0')                    # Farbe der X - Achse
    w.tempWidget.getAxis('top').setStyle(tickFont=font)            # Schriftart der X - Achse - ticks setzen
    w.tempWidget.getAxis('top').setTextPen('#b0b0b0')            # Farbe der Schrift der X - Achse - ticks setzen
    ticks = list(enumerate(dttm))                                                    # Ticks x-Achse unten vorbereiten
    ticks1 = list(enumerate(dttm1))                                               # Ticks x-Achse oben vorbereiten
    w.tempWidget.getAxis('bottom').setTicks([ticks])                # x-Achse unten Ticks setzen
    w.tempWidget.getAxis('top').setTicks([ticks1])                     # x-Achse oben Ticks setzen
    
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Cool. Habe ich so in der Doku nicht ausmachen koennen, aber toll, wenn es funtioniert.
Antworten