Matplotlib und FreeCAD in PyQt-UI

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Mark Z.
User
Beiträge: 1
Registriert: Samstag 23. August 2014, 01:16

Hallo zusammen,

und zwar bin ich dabei ein Programm zu schreiben, welches ein mit Qt erstelltes Interfache besitzt und Matplotlib und FreeCAD beinhalten soll. Matplotlib ist importiert und das plotten funktioniert sehr gut. Dass Problem ist, dass ich Dinge wie die Achsenbeschriftung etc. nicht einstellen kann, da ich nur FigureCanvas importiere, meine Frage ist daher, wie kann ich Funktionen wie zum Beispiel Legend() dem Plot hinzufügen?

Code: Alles auswählen

from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class MplCanvas(FigureCanvas):
 
    def __init__(self):
        
        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)
        FigureCanvas.__init__(self, self.fig)
        FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

        
class PLOT(QtGui.QWidget):
 
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
        self.vbl = QtGui.QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.setLayout(self.vbl)
später soll noch FreeCAD in das Interface intergiert werden, jemand eine Idee? Habe schon mehrere Ansätze gelesen und ausprobiert, viele funktionieren nicht.
Grüße

Mark mit K
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Code: Alles auswählen

point_01, = self.ax.plot([0, 2, 1])
self.ax.legend([point_01], ["MyGraph"])
Schau du dir einfach mal die zahlreichen Beispiele an.

http://matplotlib.org/api/pyplot_api.ht ... lot.legend
http://matplotlib.org/users/legend_guide.html

Da findest du eigentlich alles was du wissen willst/musst.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Die Klasse Axes (Zeile 10: self.ax) hat die Methoden
set_xlabel, set_ylabel
damit kannst Du die Achsenbeschriftung setzen (LaTeX sieht dabei übrigens sehr gut aus).

Für die Legende musst Du zunächst jeder Kurve einen Label geben.
Wenn Du einen Plot erzeugst, dann gibt die Methode plot der Klasse Axes ein Curve Objekt zurück.
Die Klasse Curve hat die Methode set_label.
Nachdem Du den Kurven Labels gegeben hast, kannst Du diese in einer Legende mit
self.ax.legend()
anzeigen.

Ansonsten ist auch die Matplotlib API der Klassen lesenswert: http://matplotlib.org/api/axes_api.html
Mark Z. hat geschrieben:bin ich dabei ein Programm zu schreiben, welches ein mit Qt erstelltes Interfache besitzt und Matplotlib und FreeCAD beinhalten soll
Das hört sich interessant an. Nutzt Du FreeCAD richtig zum Konstruieren oder lediglich als 3D-Viewer?
Ich entwickle eine Anwendung mit Qt, Matplotlib und OpenSceneGraph zur Visualsierung von Ergebnissen in 2D (Matplotlib) und 3D (OpenSceneGraph).
Von Spyder kann man sich sehr schön abgucken, wie man in so eine Anwendung eine Python-Shell integrieren kann.
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten