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

时间:2018-01-03 20:30:04

标签: python-3.x colors seaborn

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

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

1 个答案:

答案 0 :(得分: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

现在我们使用颜色映射定义一个字典,并使用.applylambda函数创建一个新列:

>>> 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)