Cómo configurar algunos xlim y ylim en Seaborn lmplot facetgrid

Estoy utilizando lmplot de Seaborn 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 establecer manualmente el límite inferior en ambas plots, pero dejar el límite superior en el valor predeterminado Seaborn. Aquí hay un ejemplo simple:

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) 

Esto da como resultado lo siguiente: introduzca la descripción de la imagen aquí

Pero en este ejemplo, me gustaría que xlim y ylim sean (0, *). Intenté usar sns.plt.ylim y sns.plt.xlim, pero eso solo afecta la gráfica de la derecha. Ejemplo:

 sns.plt.ylim(0,) sns.plt.xlim(0,) 

introduzca la descripción de la imagen aquí

¿Cómo puedo acceder a xlim e ylim para cada plot en FacetGrid?

Necesitas conseguir los ejes mismos. Probablemente la forma más limpia es cambiar tu última fila:

 lm = sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False) 

Luego, puede obtener los objetos de los ejes (una matriz de ejes):

 axes = lm.axes 

Después de eso puedes ajustar las propiedades de los ejes.

 axes[0,0].set_ylim(0,) axes[0,1].set_ylim(0,) 

crea:

introduzca la descripción de la imagen aquí

La función lmplot devuelve una instancia de FacetGrid . Este objeto tiene un método llamado set , al que puede pasar pares key=value y se establecerán en cada objeto de ejes en la cuadrícula.

En segundo lugar, puede establecer solo un lado de un límite de Ejes en matplotlib al pasar 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)) 

introduzca la descripción de la imagen aquí