Sto usando lmplot di Seaborn per tracciare una regressione lineare, dividendo il mio set di dati in due gruppi con una variabile categoriale.
Sia per x che per y, vorrei impostare manualmente il limite inferiore su entrambi i grafici, ma lasciare il limite superiore al valore predefinito di Seaborn. Ecco un semplice esempio:
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)
Questo produce quanto segue:
Ma in questo esempio, vorrei che xlim e ylim fossero (0, *). Ho provato a usare sns.plt.ylim e sns.plt.xlim ma questi hanno effetto solo sulla trama di destra. Esempio:
sns.plt.ylim(0,)
sns.plt.xlim(0,)
Come posso accedere a xlim e ylim per ogni trama in FacetGrid?
numpy.random
modulo, puoi risparmiare un sacco di tempo generando dati casuali (che può essere una cosa molto utile da fare!). Ad esempio, potresti ottenerebase_x
ebase_y
conbase_x = np.random.rand(n); base_y = base_x * 2
. Lay
variabile può quindi essere generata in modo simile con operazioni vettorializzate.