2016-11-18 36 views
1

我正在查看是否有方法設置調色板以確保在任何時候繪製圖形時,條形的顏色將與x軸。Seaborn/Python/Matplotlib定期自定義調色板

我使用Seaborn

我敢肯定,這是什麼地方上網,但已經超過一個小時,沒有運氣搜索

例如,我會想:

「星期四」總是映射到紫色, 「星期五」總是映射到紅色, 「星期六」總是映射到綠色, 「星期日」,以始終映射到藍色,

我會用這對各種不同的圖表,使用不同的標準的 - 有時是全部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循環或列表/詞典理解也可以。

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

真棒..謝謝! –