Ich verwende Seaborns lmplot, um eine lineare Regression zu zeichnen, und teile meinen Datensatz in zwei Gruppen mit einer kategorialen Variablen auf.
Sowohl für x als auch für y möchte ich die Untergrenze für beide Diagramme manuell festlegen , aber die Obergrenze bei der Seaborn-Standardeinstellung belassen. Hier ist ein einfaches Beispiel:
import pandas as pd
import seaborn as sns
import random
n = 200
random.seed(2014)
base_x = [random.random() for i in range(n)]
base_y = [2*i for i in base_x]
errors = [random.uniform(0,1) for i in range(n)]
y = [i+j for i,j in zip(base_y,errors)]
df = pd.DataFrame({'X': base_x,
'Y': y,
'Z': ['A','B']*(n/2)})
mask_for_b = df.Z == 'B'
df.loc[mask_for_b,['X','Y']] = df.loc[mask_for_b,] *2
sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)
Dies gibt Folgendes aus:
In diesem Beispiel möchte ich jedoch, dass xlim und ylim (0, *) sind. Ich habe versucht, sns.plt.ylim und sns.plt.xlim zu verwenden, aber diese wirken sich nur auf die Darstellung auf der rechten Seite aus. Beispiel:
sns.plt.ylim(0,)
sns.plt.xlim(0,)
Wie kann ich für jedes Diagramm im FacetGrid auf xlim und ylim zugreifen?
numpy.random
Modul vertraut machen , können Sie sich viel Zeit sparen, indem Sie zufällige Daten generieren (was sehr nützlich sein kann!). Zum Beispiel könnten Sie bekommenbase_x
undbase_y
mitbase_x = np.random.rand(n); base_y = base_x * 2
. Diey
Variable kann dann auf ähnliche Weise mit vektorisierten Operationen erzeugt werden.Antworten:
Die
lmplot
Funktion gibt eineFacetGrid
Instanz zurück. Dieses Objekt hat eine Methode namensset
, an die Sie übergeben könnenkey=value
Paare übergeben können. Diese werden für jedes Axes-Objekt im Raster festgelegt.Zweitens können Sie in matplotlib nur eine Seite eines Achsenlimits festlegen, indem Sie übergeben
None
Sie den Wert übergeben, den Sie als Standardwert möchten.Wenn wir diese zusammenstellen, haben wir:
g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False) g.set(ylim=(0, None))
quelle
g.set
sich jede Nebenhandlung zu ändern. Ist der Ansatz von g.axes die empfohlene Methode, um jeden von ihnen separat einzustellen?g.axes
festlegen möchten, sollten Sie das Array verwenden, wie von DrV vorgeschlagen.Sie müssen die Achsen selbst ergreifen. Der wahrscheinlich sauberste Weg ist, die letzte Zeile zu ändern:
lm = sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)
Dann können Sie die Achsenobjekte (ein Array von Achsen) erfassen:
Danach können Sie die Achseneigenschaften anpassen
axes[0,0].set_ylim(0,) axes[0,1].set_ylim(0,)
erstellt:
quelle