Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 问题排序(以递减顺序)条形图使用Seaborn绘制我的数据帧的前30个值_Python_Plot_Bar Chart_Seaborn - Fatal编程技术网

Python 问题排序(以递减顺序)条形图使用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

我在使用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_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")