我希望看看是否有办法设置调色板以确保在我绘图的任何时候,条形的颜色将与x轴上的值一致。
我正在使用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)]
但是示例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']
好吧,请注意所有颜色是如何移动的
如何设置映射到主值列表的自定义Palette(即Monday = Red,Tuesday = Green,Wednesday = Blue等)。动态地会很棒,但静态列表也可以
我知道我可以这样做:
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)
然后遍历调色板并将每种颜色分配给一个值(即第一个值是星期一,第二个星期二等)
非常感谢任何帮助!
谢谢!
杰夫
答案 0 :(得分: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)
sns.barplot(x="day",y="tip",data=df2, palette=pal)