explorador
Estoy usando sns.lmplot
para trazar una regresión lineal, dividiendo mi conjunto de datos en dos grupos con una variable categórica.
Tanto para x como para y, me gustaría configurar manualmente el límite inferior en ambas parcelas, pero deje el límite superior en el valor predeterminado de Seaborn. Aquí hay un ejemplo simple:
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)
Esto genera lo siguiente:
Pero en este ejemplo, me gustaría que xlim y ylim fueran (0,*) . Intenté usar sns.plt.ylim y sns.plt.xlim, pero solo afectan el gráfico de la derecha. Ejemplo:
sns.plt.ylim(0,)
sns.plt.xlim(0,)
¿Cómo puedo acceder a xlim e ylim para cada gráfico en FacetGrid?
mwaskom
El lmplot
función devuelve un FacetGrid
instancia. Este objeto tiene un método llamado set
al que puedes pasar key=value
pares y se establecerán en cada objeto Axes en la cuadrícula.
En segundo lugar, puede establecer solo un lado de un límite de ejes en matplotlib pasando None
para el valor que desea que permanezca como predeterminado.
Poniendo estos juntos, tenemos:
g = sns.lmplot('X', 'Y', df, col="Z", sharex=False, sharey=False)
g.set(ylim=(0, None))
Actualizar
- argumentos posicionales,
sharex
ysharey
están en desuso a partir deseaborn 0.11
g = sns.lmplot(x='X', y='Y', data=df, col="Z", facet_kws={'sharey': False, 'sharex': False})
g.set(ylim=(0, None))
Necesitas hacerte con las hachas. Probablemente la forma más limpia es cambiar la última fila:
lm = sns.lmplot('X','Y',df,col="Z",sharex=False,sharey=False)
Luego puede obtener los objetos de ejes (una matriz de ejes):
axes = lm.axes
Después de eso, puedes modificar las propiedades de los ejes.
axes[0,0].set_ylim(0,)
axes[0,1].set_ylim(0,)
crea: