Die Namen von Objekten
Matplotlib ist stark objektorientiert und seine Hauptobjekte sind die Figur und die Achsen (ich finde den Namen axes
etwas irreführend, aber wahrscheinlich bin es nur ich).
Sie können sich die Figur als Leinwand vorstellen , von der Sie normalerweise die Abmessungen und möglicherweise z. B. die Hintergrundfarbe usw. usw. angeben. Sie verwenden die Leinwand, die Figur , im Wesentlichen auf zwei Arten, indem Sie andere Objekte darauf platzieren (meistens Achsen , aber auch Textbeschriftungen usw.) und Speichern des Inhalts mit savefig
.
Sie können von einem denken Achsen als eine Art Schweizer Taschenmesser, ein handliches Objekt , das bietet ein Werkzeug (zB .plot
, .scatter
, .hist
etc.) für alles, meistens. Sie können eine, zwei, ... viele Achsen innerhalb einer Figur mit einer von vielen verschiedenen Methoden platzieren.
Die plt
Schnittstelle
Die plt- prozedurale Schnittstelle wurde ursprünglich entwickelt, um die MATLAB ™ -Schnittstelle nachzuahmen, unterscheidet sich jedoch nicht wirklich von der objektorientierten Schnittstelle, selbst wenn Sie nicht direkt auf die Hauptobjekte (dh eine Figur und eine Achse ) verweisen, die diese Objekte sind automatisch instanziiert und jede plt- Methode wird im Wesentlichen in einen Aufruf einer der Methoden der zugrunde liegenden fundamentalen Objekte übersetzt: z. B. a plt.plot()
ist a hidden_axes.plot
und a plt.savefig
ist a hidden_figure.savefig
.
In jedem Moment können Sie diese versteckten Objekte mit plt.gcf
und handhaben. plt.gca
Dies ist manchmal erforderlich, wenn eine der Objektmethoden nicht auf eine Methode im plt- Namespace portiert wurde .
Ich möchte hinzufügen, dass der plt- Namespace auch eine Reihe von praktischen Methoden enthält, um Figuren und Achsen auf unterschiedliche Weise zu instanziieren .
Ihre Beispiele
1. Weg
plt.plot(x, y)
Hier verwenden Sie nur die plt- Schnittstelle. Sie können in jeder Abbildung nur eine einzige Achse verwenden. Dies ist jedoch das, was Sie möchten, wenn Sie Ihre Daten untersuchen, ein schnelles Rezept, mit dem die Arbeit erledigt wird ...
2. Weg
ax = plt.subplot()
ax.plot(x, y)
Hier verwenden Sie eine bequeme Methode in dem PLT - Namespace einen Namen (und einen Griff) , um Ihr geben Achsen Objekt, aber btw gibt es auch eine versteckte Figur . Sie können später verwenden die Achsen zum Grundstück Objekt, um ein Histogramm usw. zu machen, alles Dinge , die Sie mit dem tun PLT - Schnittstelle, aber Sie können auch alle seine Attribute zugreifen und sie mit größerer Freiheit ändern.
3. Weg
figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)
Hier beginnen Sie a zu instanziieren Figur mithilfe einer praktischen Methode im plt- Namespace und verwenden später nur die objektorientierte Schnittstelle.
Es ist möglich, den plt zu umgehen Convenience-Methode ( matplotlib.figure.Figure
) aber Sie müssen die Zahl dann um eine bessere interaktive Erfahrung zu (schließlich handelt es sich um eine Convenience- Methode).
Persönliche Empfehlungen
Ich schlage vor plt.plot
, plt.scatter
im Rahmen einer interaktiven Sitzung möglicherweise IPython mit seiner zu verwenden%matplotlib
magischen Befehl zu verwenden und auch im Kontext eines explorativen Jupyter-Notizbuchs.
Auf der anderen Seite der objektorientierte Ansatz plus einige plt
praktische Methoden der richtige Weg
- Wenn Sie ein permanentes Problem haben, das Sie ein für alle Mal mit einer maßgeschneiderten Anordnung fein abgestimmter Nebenhandlungen lösen müssen,
- Wenn Sie Matplotlib in die Benutzeroberfläche eines von Ihnen geschriebenen Programms einbetten möchten.
Es gibt eine große Grauzone zwischen diesen Extremen und wenn Sie mich fragen, was ich tun soll, würde ich einfach sagen "Es kommt darauf an" ...