如何为pandas数据框的列中的特定值指定颜色?

问题描述 投票:2回答:1

我有一个包含3列的pandas数据框:state,total,politics。我正在尝试使用sns.barplot根据“政治”列中的值显示每个状态的简单绘图,其中状态的总和颜色。为了说明,这是我想用Tableau完成的条形图:Tableau bar chart - good!

然而,当我在seaborn中绘图时,我似乎无法弄清楚如何将“红色”作为政治专栏中的值分配给图表上的实际颜色红色!调色板似乎随机分配颜色值,因此“红色”状态有蓝色条,“蓝色”状态有绿色条,“摇摆”状态有橙色条......这让读者感到困惑!

python-3.x colors seaborn
1个回答
1
投票

您只需使用palette.barplot参数指定正确的颜色值。但你还必须告诉seaborn分配给politics列的每个单词的颜色是什么,你可以用另外一列来做:

>>> data
   total     state politics
0  16.99     Maine      Red
1  10.34    Oregon     Blue
2  21.01  Colorado    Swing
3  23.68      Utah    Swing
4  24.59  Arkansas      Red
5  25.29      Iowa     Blue

现在我们使用颜色映射定义一个字典,并使用带有.apply函数的lambda来创建一个新列:

>>> colors = {'Red':'red','Blue':'blue','Swing':'yellow'}
>>> data['color'] = data['politics'].apply(lambda x: colors[x])
>>> data
   total     state politics   color
0  16.99     Maine      Red     red
1  10.34    Oregon     Blue    blue
2  21.01  Colorado    Swing  yellow
3  23.68      Utah    Swing  yellow
4  24.59  Arkansas      Red     red
5  25.29      Iowa     Blue    blue

请注意,还必须使“红色”和“蓝色”小写,因为matplotlib将无法识别那些大写的颜色。现在我们只需要像往常一样使用.barplot,使用palette参数:

>>> sns.barplot(x='total',y='state',palette=data['color'], data=data)

© www.soinside.com 2019 - 2024. All rights reserved.