首页 > 解决方案 > 通过升序或降序订购 python Seaborn barplot

问题描述

这是我当前的代码,使用美国境内的死因数据集(按发生次数):

`top_cause_of_death_barplot=sns.catplot(data=death, x='cause_name', 
y='deaths',kind='bar',ci=None,legend_out=False,height=10, aspect=1.5)
plt.xlabel('Causes of Death',fontsize=15)
top_cause_of_death_barplot.set_xticklabels(fontsize=10)
plt.ylabel('Number of Observed Deaths',fontsize=15)
plt.title('Top Ten Leading Causes of Death in the United States (1999-2017)',fontsize=20)`

这会产生一个如下所示的图表: 原始代码

我试图重新排序图表,使条形按降序排列。我在代码中添加了一些内容并得到了这个:

`result = death.groupby(["cause_name"]) 
['deaths'].aggregate(np.median).reset_index().sort_values('cause_name')
top_cause_of_death_barplot=sns.catplot(data=death, x='cause_name', 
y='deaths',kind='bar',ci=None,legend_out=False,height=10, aspect=1.5, order=result['cause_name'] )
plt.xlabel('Causes of Death',fontsize=15)
top_cause_of_death_barplot.set_xticklabels(fontsize=10)
plt.ylabel('Number of Observed Deaths',fontsize=15)
plt.title('Top Ten Leading Causes of Death in the United States (1999-2017)',fontsize=20)`

虽然这段代码没有给我任何错误,但它似乎所做的只是以不同的随机顺序重新排列条形图,如下所示:

代码版本 2 结果

为什么会这样?我做错了什么,是否有某种方法可以将条形重新排列为我不知道的升序或降序?

标签: pythonpandasseaborn

解决方案


您必须传递 to 的x=order=。在你的情况下,我会这样做:

death = pd.read_csv('https://storage.googleapis.com/hewwo/NCHS_-_Leading_Causes_of_Death__United_States.csv', sep=',', header=0)

plot_order = death.groupby('Cause Name')['Deaths'].sum().sort_values(ascending=False).index.values

sns.catplot(data=death, x='Cause Name',  y='Deaths',kind='bar',ci=None, legend_out=False, order=plot_order)

在此处输入图像描述

或者,如果您想删除“所有原因”栏:

sns.catplot(data=death, x='Cause Name',  y='Deaths',kind='bar',ci=None, legend_out=False, order=plot_order[1:])

在此处输入图像描述


推荐阅读