Ik gebruik sns.lmplot
om een lineaire regressie te plotten, waarbij ik mijn dataset in twee groepen verdeel met een categorische variabele.
Voor zowel x als y wil ik de ondergrenshandmatig instellen op beide plots, maar de bovengrensop de Seaborn-standaard laten staan.
Hier is een eenvoudig voorbeeld:
import pandas as pd
import seaborn as sns
import numpy as np
n = 200
np.random.seed(2014)
base_x = np.random.rand(n)
base_y = base_x * 2
errors = np.random.uniform(size=n)
y = base_y + errors
df = pd.DataFrame({'X': base_x, 'Y': y, 'Z': ['A','B']*(100)})
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)
Dit levert het volgende op:
Maar in dit voorbeeld wil ik dat de xlim en de ylim (0,*) zijn. Ik heb geprobeerd sns.plt.ylim en sns.plt.xlim te gebruiken, maar die hebben alleen invloed op de rechter plot.
Voorbeeld:
sns.plt.ylim(0,)
sns.plt.xlim(0,)
Hoe krijg ik toegang tot de xlim en ylim voor elk perceel in de FacetGrid?
Antwoord 1, autoriteit 100%
De functie lmplot
retourneert een FacetGrid
-instantie. Dit object heeft een methode genaamd set
, waaraan u key=value
-paren kunt doorgeven en deze worden ingesteld op elk Axes-object in het raster.
Ten tweede kun je slechts één kant van een Axes-limiet in matplotlib instellen door None
door te geven voor de waarde die je als standaard wilt behouden.
Als we deze samenvoegen, hebben we:
g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))
Bijwerken
- Positieargumenten,
sharex
ensharey
worden afgekeurd vanafseaborn 0.11
g = sns.lmplot(x='X', y='Y', data=df, col='Z', facet_kws={'sharey': False, 'sharex': False})
g.set(ylim=(0, None))
Antwoord 2, autoriteit 51%
Je moet de bijlen zelf pakken. Waarschijnlijk de schoonste manier is om je laatste rij te veranderen:
lm = sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)
Dan kun je de assenobjecten (een array van assen) pakken:
axes = lm.axes
Daarna kunt u de eigenschappen van de assen aanpassen
axes[0,0].set_ylim(0,)
axes[0,1].set_ylim(0,)
creëert: