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