Seaborn Bar Plot Ordering

Tro*_*ump 12 python matplotlib pandas seaborn

我有一个有两列的pandas数据框.

我需要"计数"列所订购的情节.

dicti=({'37':99943,'25':47228,'36':16933,'40':14996,'35':11791,'34':8030,'24' : 6319 ,'2'  :5055 ,'39' :4758 ,'38' :4611  })
pd_df = pd.DataFrame(list(dicti.iteritems()))
pd_df.columns =["Dim","Count"]
plt.figure(figsize=(12,8))
ax = sns.barplot(x="Dim", y= "Count",data=pd_df )
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "
{:,}".format(int(x))))
ax.set(xlabel="Dim", ylabel='Count')
for item in ax.get_xticklabels():
    item.set_rotation(90)
for i, v in enumerate(pd_df["Count"].iteritems()):        
    ax.text(i ,v[1], "{:,}".format(v[1]), color='m', va ='bottom', 
    rotation=45)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

现在情节按"Dim"栏排序,我需要按"计数"栏排序,我该怎么做?在此输入图像描述

For*_*ver 10

您可以为此使用order参数。

sns.barplot(x='Id', y="Speed", data=df, order=result['Id'])
Run Code Online (Sandbox Code Playgroud)

归功于韦恩。

参见他的其余代码

  • 但是否可以按估计值排序:`sns.barplot(x='Id', y="Speed", data=df, estimator=np.mean, order=?)` (2认同)
  • 如果您能展示如何评估“结果”,那就更好了。就目前情况而言,你只是提出了一句行不通的俏皮话。 (2认同)

Ser*_*ity 9

您必须以所需的方式对数据帧进行排序,并重新索引它以生成新的升序/降序索引.之后,您可以绘制条形图,索引为x值.然后按数据框的Dim列设置标签集:

import matplotlib.pylab as plt
import pandas as pd
import seaborn as sns

dicti=({'37':99943,'25':47228,'36':16933,'40':14996,'35':11791,'34':8030,'24' : 6319 ,'2'  :5055 ,'39' :4758 ,'38' :4611  })
pd_df = pd.DataFrame(list(dicti.items()))
pd_df.columns =["Dim","Count"]
print (pd_df)
# sort df by Count column
pd_df = pd_df.sort_values(['Count']).reset_index(drop=True)
print (pd_df)

plt.figure(figsize=(12,8))
# plot barh chart with index as x values
ax = sns.barplot(pd_df.index, pd_df.Count)
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set(xlabel="Dim", ylabel='Count')
# add proper Dim values as x labels
ax.set_xticklabels(pd_df.Dim)
for item in ax.get_xticklabels(): item.set_rotation(90)
for i, v in enumerate(pd_df["Count"].iteritems()):        
    ax.text(i ,v[1], "{:,}".format(v[1]), color='m', va ='bottom', rotation=45)
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我是否理解正确——即使我已经对数据框进行了排序,我也必须首先使用索引作为标签来创建它,以确保 sns 不会根据标签名称按字母顺序对条进行排序(并且无法通过,例如,`sorted = False`,以避免这种情况)? (2认同)

Voj*_*tas 9

要进行特定订单,我建议创建一个列表,然后按其排序:

order_list = ['first', 'second', 'third']
sns.barplot(x=df['x'], y=df['y'], order=order_list)
Run Code Online (Sandbox Code Playgroud)


小智 5

准备数据框,使其按所需的列排序。

现在将其作为参数传递给函数。

import pandas as pd
import seaborn as sns

dicti=({'37': 99943,'25': 47228,'36': 16933,'40': 14996,'35': 11791,'34': 8030,'24': 6319 ,'2': 5055 ,'39': 4758 ,'38' :4611})
pd_df = pd.DataFrame(list(dicti.items()))
pd_df.columns =["Dim", "Count"]

# Here the dataframe is already sorted if not use the below line
# pd_df = pd_df.sort_values('Count').reset_index()
# or 
# pd_df = pd_df.sort_values('Count',ascending=False).reset_index()

sns.barplot(x='Dim', y='Count', data=pd_df, order=pd_df['Dim'])`
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明