Ich bevorzuge die Verwendung matplotlib
im 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 seaborn
Plotfunktionen wie lmplot
welche Figure
oder welche Axes
?
python
oop
matplotlib
seaborn
Gefrorene Flamme
quelle
quelle
Antworten:
Es hängt ein wenig davon ab, welche Seaborn-Funktion Sie verwenden.
Die Plotfunktionen bei Seegeborenen sind grob in zwei Klassen unterteilt
regplot
,boxplot
,kdeplot
, und viele anderelmplot
,factorplot
,jointplot
und ein oder zwei andereDie erste Gruppe wird identifiziert, indem ein explizites
ax
Argument verwendet und einAxes
Objekt zurückgegeben wird. Wie dies nahelegt, können Sie sie in einem "objektorientierten" Stil verwenden, indem Sie IhreAxes
an sie übergeben:Funktionen auf
Axes
Achsenebene 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
lmplot
auf 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ückgegebenFacetGrid
. 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 ArgumentenFacetGrid.fig
undFacetGrid.axes
angezeigt. Diejointplot
Funktion ist sehr ähnlich, verwendet jedoch einJointGrid
Objekt. Sie können diese Funktionen also weiterhin in einem objektorientierten Kontext verwenden, aber alle Anpassungen müssen erfolgen, nachdem Sie die Funktion aufgerufen haben.quelle