Seite 1 von 1

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

Verfasst: Sonntag 24. September 2023, 14:02
von Zeile42
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

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

Verfasst: Sonntag 24. September 2023, 19:29
von __deets__
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.

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

Verfasst: Dienstag 28. November 2023, 11:17
von Weißnix
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
    

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

Verfasst: Dienstag 28. November 2023, 13:30
von __deets__
Cool. Habe ich so in der Doku nicht ausmachen koennen, aber toll, wenn es funtioniert.