Zeichnen mit Seaborn über die objektorientierte Schnittstelle matplotlib

103

Ich bevorzuge die Verwendung matplotlibim OOP-Stil:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

Dies erleichtert das Verfolgen mehrerer Figuren und Nebenhandlungen.

Frage: Wie benutzt man Seaborn auf diese Weise? Oder wie kann man dieses Beispiel in den OOP-Stil ändern ? Wie erkennt man seabornPlotfunktionen wie lmplotwelche Figureoder welche Axes?

Gefrorene Flamme
quelle
1
Verwandte Themen : Dieses Problem und diese Antwort für eine mögliche Problemumgehung, mit der eine seegeborene Figur erstellt und später alle Achsen in ein Teilplotgitter verschoben werden können.
ImportanceOfBeingErnest

Antworten:

228

Es hängt ein wenig davon ab, welche Seaborn-Funktion Sie verwenden.

Die Plotfunktionen bei Seegeborenen sind grob in zwei Klassen unterteilt

  • „Achsen-level“ Funktionen, einschließlich regplot, boxplot, kdeplot, und viele andere
  • „Figure-level“ Funktionen, einschließlich der lmplot, factorplot, jointplotund ein oder zwei andere

Die erste Gruppe wird identifiziert, indem ein explizites axArgument verwendet und ein AxesObjekt zurückgegeben wird. Wie dies nahelegt, können Sie sie in einem "objektorientierten" Stil verwenden, indem Sie Ihre Axesan sie übergeben:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

Funktionen auf AxesAchsenebene zeichnen nur auf eine und werden sonst nicht mit der Figur in Konflikt geraten, sodass sie in einem objektorientierten Matplotlib-Skript perfekt glücklich nebeneinander existieren können.

Die zweite Gruppe von Funktionen (Abbildungsebene) zeichnet sich dadurch aus, dass das resultierende Diagramm möglicherweise mehrere Achsen enthalten kann, die immer "sinnvoll" organisiert sind. Das bedeutet, dass die Funktionen die vollständige Kontrolle über die Figur haben müssen, so dass es nicht möglich ist, beispielsweise eine lmplotauf eine bereits vorhandene zu zeichnen . Durch Aufrufen der Funktion wird immer eine Figur initialisiert und für das von ihr gezeichnete Diagramm eingerichtet.

Sobald Sie aufgerufen haben lmplot, wird jedoch ein Objekt des Typs zurückgegeben FacetGrid. Dieses Objekt verfügt über einige Methoden zum Bearbeiten des resultierenden Diagramms, die etwas über die Struktur des Diagramms wissen. Außerdem werden die zugrunde liegende Figur und das Achsenarray an den Argumenten FacetGrid.figund FacetGrid.axesangezeigt. Die jointplotFunktion ist sehr ähnlich, verwendet jedoch ein JointGridObjekt. Sie können diese Funktionen also weiterhin in einem objektorientierten Kontext verwenden, aber alle Anpassungen müssen erfolgen, nachdem Sie die Funktion aufgerufen haben.

mwaskom
quelle
Das war wirklich hilfreich. Schauen Sie sich meine Antwort hier an: stackoverflow.com/questions/27019079/…
denson