pyqtgraph - AxisItem

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
sraab
User
Beiträge: 3
Registriert: Donnerstag 5. Juli 2012, 09:44

Hallo zusammen,

zum Plotten eines Graphen benutze ich die pyqtgraph-Bibliothek. Jetzt will ich die Achsenbeschriftung individuell gestalten. Dazu gibt es in pyqtgraph die Klasse AxisItem. Hat jemand damit schon mal gearbeitet? Ich blicke da nicht so ganz durch, alle meine bisherigen Versuche, überhaupt eine Achse damit im Plot darzustellen sind gescheitert.

Hier mein Code:

Code: Alles auswählen

import PyQt4.QtCore as QC
from PyQt4 import QtGui
import numpy as np
import pyqtgraph as pg

def update_plot(widget):
        widget.plotItem.plot(x=data_x, y=data_y, pen ="r")
    
app = QtGui.QApplication([])
widget = pg.PlotWidget(title = "Testplott")
widget.setBackgroundBrush(QtGui.QColor(255,255,255))
update_plot(widget)

ax = pg.AxisItem('top', linkView = widget, maxTickLength = 500, showValues=False)
ax.setLabel(text = "Hello World")
ax.showLabel()
ax.show()
widget.show()
Ohne die 4 Befehlszeilen, beginnend mit ax, funktioniert der Plot einwandfrei.
Wo liegt mein Fehler, bzw. was muss ich noch machen, damit mir eine individuelle gestaltete Achse angezeigt wird?

Schon mal vielen Dank für die Hilfe.
Zuletzt geändert von Anonymous am Donnerstag 5. Juli 2012, 12:14, insgesamt 1-mal geändert.
Grund: Code-Tags hinzugefügt
lunar

@sraab: Bitte zeige die Fehlermeldung, die Du erhältst, oder beschreibe, was Du erwartest, und was Dein Quelltext stattdessen anzeigt.

Achte in Zukunft bitte auch auf die korrekte Formatierung Deiner Beiträge, da man den Quelltext sonst nicht lesen kann.
sraab
User
Beiträge: 3
Registriert: Donnerstag 5. Juli 2012, 09:44

Ich erhalte gar keine Fehlermeldung. Der erstelle Plot wird ganz normal angezeigt. Es ist kein Unterschied in der Plot-Anzeige sichtbar, ob ich die 4 ax-Befehlszeilen im Code drinlasse oder auch nicht.

Erwarten würde ich, dass die x-Achse oben erscheint, die Zahlenbeschriftung daran verschwinden und als Achsenbeschriftung "Hello World" abgebildet wird.
Die Dokumentation zur Klasse AxisItem findet man übringens hier: http://luke.campagnola.me/code/pyqtgrap ... sitem.html

Mein Gefühl sagt mir, dass die Achse schon erzeugt wird (schließlich gibt es keine Fehlermeldungen), nicht aber mit dem Plot dargestellt wird. Woran das auch immer liegen mag...
lunar

@sraab: Kein Wunder, Du erzeugst das AxisItem auch, ohne es dem Plot zuzuweisen. Mithin passiert auch nichts, denn das AxisItem weiß überhaupt nicht, zu welchem Plot es gehört. Das "linkView"-Argument macht etwas anderes: Es gleicht den Wertebereich der Achse an den sichtbaren Ausschnitt des angegeben Views an. Es sorgt aber nicht dafür, dass die Achse auch in diesem View angezeigt wird.

Wenn Du AxisItem verwenden willst, kannst Du nicht auf PlotWidget zurückgreifen, sondern muss – so wie ich das sehe – Deinen Plot manuell mit QGraphicsScene und QGraphicsView zusammen bauen. Möchtest Du dagegen nur die Achsen des Plots manipulieren, dann muss Du die entsprechende Achse vom PlotItem des PlotWidgets abfragen:

Code: Alles auswählen

ax = widget.getPlotItem().getAxis('top')
ax.setLabel('Hello world')
ax.showLabel()
sraab
User
Beiträge: 3
Registriert: Donnerstag 5. Juli 2012, 09:44

Vielen Dank lunar!

Ich glaube, so (leicht), wie ich mir das vorgestellt habe funktioniert die Sache dann doch nicht. Ich muss mir einen anderen Lösungsweg ausdenken...
Antworten