2016-02-23 6 views
5

Jupyter Internecie notebook wykazując kod i pokazujący różnice kolorów jest pod adresem: https://anaconda.org/walter/pandas_seaborn_color/notebookDlaczego paleta kolorów Seaborn nie działa dla wykresów słupkowych Pandy?

Kolory są źle, gdy robię wykresy słupkowe, stosując metodę dataframe pandy. Seaborn poprawia paletę kolorów matplotlib. Wszystkie działki z matplotlib automatycznie korzystają z nowej palety Seaborn. Jednak wykresy słupkowe z ramek danych Pandas powracają do kolorów innych niż Seaborn. Takie zachowanie nie jest spójne, ponieważ wykresy liniowe z Pand danych ramek do używają kolorów Seaborn. To sprawia, że ​​moje wątki wydają się być w różnych stylach, nawet jeśli używam Pand do wszystkich moich fabuł.

W jaki sposób mogę wykreślić metody Pandy, uzyskując spójną paletę kolorów Seaborn?

Uruchomiłem to w pytonie 2.7.11, używając środowiska conda z niezbędnymi pakietami dla tego kodu (pandy, matplotlib i seaborn).

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 

df = pd.DataFrame({'y':[5,7,3,8]}) 

# matplotlib figure correctly uses Seaborn color palette 
plt.figure() 
plt.bar(df.index, df['y']) 
plt.show() 

# pandas bar plot reverts to default matplotlib color palette 
df.plot(kind='bar') 
plt.show() 

# pandas line plots correctly use seaborn color palette 
df.plot() 
plt.show() 
+0

* 1. * Jaki jest Twój konkretne pytanie - czy chcesz dowiedzieć się rozwiązanie (i możliwe obejście) lub chcesz poznać przyczynę tego zachowania? * 2. * Ta informacja może być związana z twoim pytaniem: 'pyplot.scatter' również nie używa kolorów seaborn (domyślnie?). – kazemakase

+0

Dzięki kazemakase. Zmieniłem to pytanie, aby wyjaśnić, że chciałbym wiedzieć, w jaki sposób mogę spiskować przy użyciu metod Pandy, jednocześnie uzyskując spójną paletę kolorów Seaborn. (Oczywiście znajomość przyczyny może być przydatna w powyższym zakresie). – Walter

Odpowiedz

5

Kredyt dla @mwaskom za wskazanie na sns.color_palette(). Szukałem tego, ale jakoś tęskniłem, stąd oryginalny bałagan z prop_cycle.


Jako obejście można ustawić kolor ręcznie. Zwróć uwagę, że argument słowa kluczowego color zachowuje się inaczej, jeśli rysujesz jedną lub kilka kolumn.

df = pd.DataFrame({'x': [3, 6, 1, 2], 'y':[5, 7, 3, 8]}) 

df['y'].plot(kind='bar', color=sns.color_palette(n_colors=1)) 

One column plot

df.plot(kind='bar', color=sns.color_palette()) 

Two columns plot

Mój oryginalny odpowiedź:

prop_cycle = plt.rcParams['axes.prop_cycle'] 
df['y'].plot(kind='bar', color=next(iter(prop_cycle))['color']) 
df.plot(kind='bar', color=[x['color'] for x in prop_cycle]) 
+1

Możesz po prostu zrobić 'sns.color_palette()', aby uzyskać bieżący kolor; nie jest konieczne robienie tego biznesu ze zrozumieniem listy. – mwaskom

+0

To wystarczy! Dziękuję wam, Goyo i mwaskom. – Walter

2

To był błąd w pand specjalnie dla działek kreskowych (i boxplots a myślę), który jest w stałym mistrza Pandy (patrz zgłoszony issue i PR go naprawić).
To będzie w pandach 0.18.0, które ukażą się w najbliższych tygodniach.

+0

Joris, jest to bardzo pomocne, a link do problemu ma charakter informacyjny. Chciałbym móc wybrać dwie odpowiedzi, ale poszedłem z Goyo, ponieważ było to natychmiast przydatne i wydaje się, że będzie miało większy potencjał długowieczności w odniesieniu do tego tematu. Dziękuję Ci! – Walter

+0

Tak, oczywiście, nie ma problemu! :-) – joris

+0

Potwierdziłem również tę odpowiedź teraz. Zainstalowałem wersję rozwojową Pandy 0.18.0rc1 + 62.g41b1d25, co rozwiązuje problem. – Walter