2017-07-03 70 views
1

我使用matplotlib.pyplot和seaborn庫創建了一個條形圖。如何根據Speed按升序排列條形圖?我想看看左側最低速度和右側最高速度的酒吧。如何按升序對條形圖中的條形進行排序?

df = 
    Id   Speed 
    1   30 
    1   35 
    1   31 
    2   20 
    2   25 
    3   80 

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

%matplotlib inline 

result = df.groupby(["Id"])['Speed'].aggregate(np.median).reset_index() 

norm = plt.Normalize(df["Speed"].values.min(), df["Speed"].values.max()) 
colors = plt.cm.Reds(norm(df["Speed"])) 

plt.figure(figsize=(12,8)) 
sns.barplot(x="Id", y="Speed", data=gr_vel_1, palette=colors) 
plt.ylabel('Speed', fontsize=12) 
plt.xlabel('Id', fontsize=12) 
plt.xticks(rotation='vertical') 
plt.show() 
+0

回答更新。 –

回答

3
df.groupby(['Id']).median().sort_values("Speed").plot.bar() 

或者只是嘗試sort_values( 「速度」)您彙總後他們。

編輯: 所以你需要這樣做:

result = a.groupby(["Id"])['Speed'].aggregate(np.median).reset_index().sort_values('Speed') 

和sns.barplot添加順序爲:

sns.barplot(x='Id', y="Speed", data=a, palette=colors, order=result['Id']) 
+0

謝謝。我嘗試了這種方法,但酒吧沒有排序。如果我在聚合後添加'sort_values',那麼我得到這個錯誤:'ValueError:沒有名爲速度的對象類型' – Dinosaurius

+0

現在它工作。謝謝。 – Dinosaurius

+0

我做了一個筆記本,原始的和排序的結果都顯示在一起[這裏](https://nbviewer.jupyter.org/gist/fomightez/bb5a9c727d93d1508187677b4d74d7c1)。 – Wayne