Penso che utilizzando il hue_kwds
in PairGrid è un easyer molto. Ho trovato una bella spiegazione qui Plotting on data-aware grids, perché il documento in PairGrid non è abbastanza chiaro per me.
Si può anche lasciare gli altri aspetti della trama variano tra i vari livelli della variabile tonalità , che possono essere utili per realizzare grafici che saranno più comprensibili quando stampato in bianco e nero.Per fare ciò, passare un dizionario a hue_kws dove le chiavi sono i nomi della funzione di plottaggio Gli argomenti delle parole chiave sono valori di valori di parole chiave, uno per ciascun livello di della variabile di tonalità.
In sostanza, hue_kws
è un ditt di elenchi. Le parole chiave vengono passate alle singole funzioni di tracciamento con i valori della loro lista, una per ciascun livello della variabile hue
. Vedere l'esempio di codice qui sotto.
Sto usando una colonna numerica per la tonalità nella mia analisi, ma dovrebbe funzionare anche qui. In caso contrario, è possibile mappare facilmente ciascun valore univoco di "modelli" in intero.
Rubare dalla bella risposta da Martin Perez vorrei fare qualcosa di simile:
EDIT: completo esempio di codice
EDIT 2: ho scoperto che kdeplot non gioca bene con le etichette numeriche. Cambiando il codice di conseguenza.
# generate data: sorry, I'm lazy and sklearn make it easy.
n = 1000
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=n, centers=3, n_features=3,random_state=0)
df2 = pd.DataFrame(data=np.hstack([X,y[np.newaxis].T]),columns=['X','Y','Z','model'])
# distplot has a problem witht the color being a number!!!
df2['model'] = df2['model'].map('model_{}'.format)
list_of_cmaps=['Blues','Greens','Reds','Purples']
g = sns.PairGrid(df2,hue='model',
# this is only if you use numerical hue col
# vars=[i for i in df2.columns if 'm' not in i],
# the first hue value vill get cmap='Blues'
# the first hue value vill get cmap='Greens'
# and so on
hue_kws={"cmap":list_of_cmaps},
)
g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot,shade=True, shade_lowest=False)
g.map_diag(sns.distplot)
# g.map_diag(plt.hist)
g.add_legend()
Ordinamento list_of_cmaps
si dovrebbe essere in grado di assegnare una particolare sfumatura a un livello specifico della vostra variabile categoriale.
Un aggiornamento sarebbe creare dinamicamente list_of_cmaps
in base al numero di livelli necessari.
Avrete bisogno di fare una piccola funzione di wrapper per 'kdeplot' in modo che comprenda un parametro" colore "nel contesto di un grafico bivariato e lo utilizzi per scegliere una mappa di colori appropriata, ad es. usando 'sns.dark_palette'. Farò un esempio più tardi quando avrò tempo, ma potrebbe essere d'aiuto. – mwaskom