web-dev-qa-db-de.com

Seaborn Bar Plot Bestellung

Ich habe einen Pandas-Datenrahmen mit zwei Spalten. 

Ich brauche die von der "Count" -Säule geordnete Handlung.

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

Im Moment wird die Handlung nach der Spalte "Dim" geordnet. Ich brauche sie nach der Spalte "Count". Wie kann ich das tun? enter image description here

6
Tronald Dump

Sie müssen Ihren Datenrahmen in der gewünschten Weise sortieren und ihn neu indexieren, um einen neuen auf- und absteigenden Index zu erstellen. Danach können Sie ein Balkendiagramm mit Index als x-Werte darstellen. Legen Sie dann die Beschriftungen der Dim-Spalte Ihres Datenrahmens fest:

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

 enter image description here

7
Serenity

sie können dazu den Auftragsparameter verwenden. 

sns.barplot(x='Id', y="Speed", data=df, order=result['Id'])

Gutschriften an Wayne. 

Sehen Sie den Rest seines Codes

1
Foreever