web-dev-qa-db-ja.com

Pandasプロットバーの順序カテゴリ

「low」、「medium」、「high」の3つの一意の値を含むカテゴリ変数を持つデータセットがあります。

df.CatVar.value_counts()
Out[93]: 
Medium    35832
Low       25311
High      12527
Name: CatVar, dtype: int64

ユニークな値の数を棒グラフとしてプロットしようとしています。ただし、次のコードでは[[中]、[低]、[高]]の順序でバーが表示されます。

df.CatVar.value_counts().plot(kind="bar")

プロットの棒の順序を変更するにはどうすればよいですか?

8
ViggoTW

2つの可能な解決策があります-プロットの前にindexの順序を変更します- reindex またはlocによる:

df.CatVar.value_counts().reindex(["Low", "Medium", "High"]).plot(kind="bar")
df.CatVar.value_counts().loc[["Low", "Medium", "High"]].plot(kind="bar")

または ordered categorical を使用して、value_countsの後にcategoriesパラメータで順序を取得します。

df.CatVar = pd.Categorical(df.CatVar, categories=["Low", "Medium", "High"], ordered=True)
df.CatVar.value_counts(sort=False).plot(kind="bar")

サンプル

df = pd.DataFrame({'CatVar':['Low','Medium','Low','Low','Medium','High']})
print (df)
   CatVar
0     Low
1  Medium
2     Low
3     Low
4  Medium
5    High

df.CatVar.value_counts().reindex(["Low", "Medium", "High"]).plot(kind="bar")

pic

10
jezrael

次のコードは私の問題を解決しました:

df.CatVar.value_counts()[['Low', 'Medium', 'High']].plot(kind="bar")
4
ViggoTW

seabornを使用してもかまわない場合は、 countplot を使用できます。これには、orderを渡すパラメーターがあります。

import seaborn as sns

df = pd.DataFrame({'CatVar':['Low','High','Low','Low','Medium']})
sns.countplot(x='CatVar', data=df, order=['Low', 'Medium', 'High']);
2
student