Python 问题排序(以递减顺序)条形图使用Seaborn绘制我的数据帧的前30个值
我在使用Seaborn对条形图的前30个值进行排序(减小)时遇到问题。我正在使用我在这里找到的一些建议,但我仍然有这个问题 我当前的脚本如下所示:Python 问题排序(以递减顺序)条形图使用Seaborn绘制我的数据帧的前30个值,python,plot,bar-chart,seaborn,Python,Plot,Bar Chart,Seaborn,我在使用Seaborn对条形图的前30个值进行排序(减小)时遇到问题。我正在使用我在这里找到的一些建议,但我仍然有这个问题 我当前的脚本如下所示: c_firms_2008a = c_firms_2008.sort_values(['diversity'], ascending=False).reset_index(drop=True).head(n=20) ax = sns.catplot(x="code_city", y="diversity", kind="bar", data=c_fi
c_firms_2008a = c_firms_2008.sort_values(['diversity'], ascending=False).reset_index(drop=True).head(n=20)
ax = sns.catplot(x="code_city", y="diversity", kind="bar", data=c_firms_2008a, aspect=16/8, palette="GnBu_d")
ax.set(xlabel='Industries', ylabel='VAT Generated, US Dollars')
ax.set_xticklabels(rotation=30)
我的结果图如下所示
我做错了什么 编辑:我找到了一个比我原来在下面写的更好的解决方案
catplot
不支持数据帧的排序。因此,为了确保条形图的顺序正确,请使用order=
参数:
df = pd.DataFrame({'code': np.arange(10), 'val':np.random.normal(size=(10,))})
df_sorted = df.sort_values(by='val', ascending=False)
ax = sns.catplot(x="code", y="val", kind="bar", data=df_sorted, order=df_sorted.code, aspect=16/8, palette="GnBu_d")
原始答案:
看起来,如果x轴是数字(或看起来像数字),则catplot总是对x轴进行排序。(远不是完美的)解决方案是将您的x类别转换为无法转换为数字的内容:
df = pd.DataFrame({'code': np.arange(10), 'val':np.random.normal(size=(10,))})
df_sorted = df.sort_values(by='val', ascending=False)
这不起作用(如您所发现的):
转换为字符串似乎还不够
df_sorted2 = df_sorted.copy()
df_sorted2['code'] = df_sorted2.code.astype(str)
ax = sns.catplot(x="code", y="val", kind="bar", data=df_sorted2, aspect=16/8, palette="GnBu_d")
这确实有效
df_sorted3 = df_sorted.copy()
df_sorted3['code'] = df_sorted3['code'].map(lambda x: '#{:d}'.format(x))
ax = sns.catplot(x="code", y="val", kind="bar", data=df_sorted3, aspect=16/8, palette="GnBu_d")
排序后,请尝试打印
c_firms_2008a
,查看值是否正确sorted@Bazingaa,我这样做了,它们被分类了。
df_sorted3 = df_sorted.copy()
df_sorted3['code'] = df_sorted3['code'].map(lambda x: '#{:d}'.format(x))
ax = sns.catplot(x="code", y="val", kind="bar", data=df_sorted3, aspect=16/8, palette="GnBu_d")