pandas 按升序或降序排列条形图

pod7payv  于 2023-05-21  发布在  其他
关注(0)|答案(2)|浏览(167)

这是我目前的代码,使用的是美国境内按发生次数划分的死亡原因数据集:

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

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

为什么会发生这种情况?我做错了什么,是否有一些方法重新排列酒吧成升序或降序,我不知道?

cotxawn7

cotxawn71#

您必须将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:])

kmpatx3s

kmpatx3s2#

您可以将sns.catplot()order参数设置为首选顺序。您可以使用df['col'].value_counts().index来获取此订单。您还没有提供数据的示例,因此请允许我提供一个易于复制的示例。

import seaborn as sns
import pandas as pd
import numpy as np

a = np.random.choice(['cat', 'dog', 'hamster'], 100)

df = pd.DataFrame(a, columns=['animals'])

sns.catplot(data=df, x='animals',kind='count',ci=None,legend_out=False,
            height=3, aspect=1.5, order=df['animals'].value_counts().index)

相关问题