我有一个包含3列的pandas数据框:state,total,politics。我正在尝试使用sns.barplot根据“政治”列中的值显示每个状态的简单绘图,其中状态的总和颜色。为了说明,这是我想用Tableau完成的条形图:Tableau bar chart - good!
然而,当我在seaborn中绘图时,我似乎无法弄清楚如何将“红色”作为政治专栏中的值分配给图表上的实际颜色红色!调色板似乎随机分配颜色值,因此“红色”状态有蓝色条,“蓝色”状态有绿色条,“摇摆”状态有橙色条......这让读者感到困惑!
您只需使用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)