繁体   English   中英

Seaborn / Python / Matplotlib的循环自定义调色板

[英]Recurring Custom Color Palette for Seaborn/Python/Matplotlib

我正在寻找是否有一种方法可以设置调色板,以确保每次绘制图形时,条形的颜色都将与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']

看起来如下

好吧,请注意所有颜色如何变化

如何设置自定义调色板,该调色板映射到值的主列表(即,星期一=红色,星期二=绿色,星期三=蓝色等)。 动态地很棒,但是静态列表也可以

我知道我可以做类似的事情:

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)

然后遍历调色板并为每种颜色分配一个值(即第一个值是星期一,第二个星期二,等等)

将不胜感激!

谢谢!

杰夫

就像您说的那样:“遍历调色板并将每种颜色分配给一个值”。 在这里,我将使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM