Myślę, że przy użyciu hue_kwds
w PairGrid jest dużo easyer. Znalazłem ładne wyjaśnienie tutaj Plotting on data-aware grids, ponieważ doc w PairGrid nie jest dla mnie wystarczająco jasne.
Można również poinformować inne aspekty fabuły różnią się w poszczególnych poziomach zmiennej odcień , które mogą być pomocne przy tworzeniu wykresów, które będzie bardziej zrozumiały po wydrukowaniu w biały czarno-.Aby to zrobić, należy przekazać słownik do hue_kws, gdzie klucze są nazwami funkcji drukowania, a wartości są listami wartości słów kluczowych, po jednym dla każdego poziomu zmiennej hue.
Zasadniczo, hue_kws
jest dyktowaniem list. Słowo kluczowe jest przekazywane do pojedynczych funkcji drukowania z wartościami z ich listy, po jednym dla każdego poziomu zmiennej hue
. Zobacz przykład kodu poniżej.
Używam kolumn liczbowych dla odcienia w mojej analizie, ale powinno również działać tutaj. Jeśli nie, możesz łatwo odwzorować każdą unikalną wartość "modeli" na liczbę całkowitą.
Kradzież z miłą odpowiedź od Martin Perez chciałbym zrobić coś takiego:
EDIT: kompletny przykładowy kod
EDIT 2: Okazało się, że kdeplot nie gra dobrze z etykiet numerycznych. Odpowiednio zmieniając kod.
# 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()
Sortowanie list_of_cmaps
powinieneś być w stanie przypisać konkretny odcień do określonego poziomu zmiennej kategorycznego.
Uaktualnienie polegałoby na dynamicznym utworzeniu list_of_cmaps
w zależności od wymaganej liczby poziomów.
Będziesz potrzebować małej funkcji owijania dla 'kdeplot', aby zrozumiał parametr" kolor "w kontekście dwuwymiarowego wykresu i użył go do wybrania odpowiedniej mapy kolorów, np. używając 'sns.dark_palette'. Podam przykład później, kiedy mam czas, ale to może pomóc. – mwaskom