2016-11-18 3 views
1

Я смотрю, есть ли способ настроить цветовую палитру, чтобы удостовериться, что в любое время, когда я рисую, цвета баров будут соответствовать значениям на ось х.Повторяющаяся пользовательская цветовая палитра для Seaborn/Python/Matplotlib

Я использую Сиборн

Я уверен, что это где-то в Интернете, но искал в течение часа, не повезло

Например, я хотел бы:

«Четверг» всегда отображаться в фиолетовый, «пятница», чтобы всегда отображаться в красный, «субботу» всегда карту на зеленый, «воскресенье» всегда карту на синий,

Я буду использовать это для разнообразие различных диаграмм, используя различные критерии - иногда все 4 дня будет включено, иногда они не будут

Если посмотреть на примере ниже, цвета работают хорошо

Пример 1:

%matplotlib inline 
import pandas as pd 
import seaborn as sns 
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata- book/master/ch08/tips.csv", sep=',') 
df=df[(df['sex']=='Female')&(df['smoker']=='No')&(df['time']=='Dinner')&(df['size']==2)] 

Looks as follows

Но пример 2, основанный на фильтрации из воскресенье:

%matplotlib inline 
import pandas as pd 
import seaborn as sns 
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata- book/master/ch08/tips.csv", sep=',') 
df=df[(df['sex']=='Female')&(df['smoker']=='No')&(df['time']=='Dinner')&(df['size']==2)] 
df=df[df['day']!='Sun'] 

Looks as Follows

Ну, обратите внимание, как все цвета сдвинуты

Как создать пользовательскую палитру, которая получает переведенный в основной список значений (т.е. Понедельник = красный, вторник = зеленый, среда = синий и т. Д.). Динамически было бы здорово, но статический список в порядке также

Я знаю, что могу сделать что-то вроде:

pal = dict(Sat="k", Thur="b", Fri="y", Sun="#9b59b6") 

x=sns.barplot(x="day",y="tip",data=df, palette=pal) 

который устанавливает палитру, а затем применяет его к каждой строке, но я еще надеюсь быть возможность использовать существующую палитру, что-то вроде

sns.color_palette("Set1", n_colors=30, desat=.5) 

а потом перебирать палитры и присвоить каждый цвет на значение (то есть первое значение понедельника, второй вторник и т.д.)

Поблагодарили бы за помощь!

Спасибо!

Джефф

ответ

2

Просто делать, как вы говорите: «перебирать палитры и присвоить каждый цвет значения». Здесь я буду использовать zip, но будет работать цикл for или понимание списка/dict.

df = pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',') 
df1 = df[(df['sex']=='Female')&(df['smoker']=='No')&(df['time']=='Dinner')&(df['size']==2)] 
df2 = df1[df1['day']!='Sun'] 

days = df['day'].unique() 
pal = dict(zip(days, sns.color_palette("Set1", n_colors=len(days)))) 

sns.barplot(x="day",y="tip",data=df1, palette=pal) 

df1

sns.barplot(x="day",y="tip",data=df2, palette=pal) 

df2

+0

удивительный .. спасибо! –