Pandas 绘图栏顺序类别
Pandas plot bar order categories
我有一个包含三个唯一值的分类变量的数据集,"low"、"medium" 和 "high":
df.CatVar.value_counts()
Out[93]:
Medium 35832
Low 25311
High 12527
Name: CatVar, dtype: int64
我正在尝试将唯一值的数量绘制为条形图。但是,以下代码按 ["Medium"、"Low"、"High"]
的顺序给出了条形图
df.CatVar.value_counts().plot(kind="bar")
如何更改图中条形的顺序?
以下代码解决了我的问题:
df.CatVar.value_counts()[['Low', 'Medium', 'High']].plot(kind="bar")
有 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")
如果你不介意使用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']);
我有一个包含三个唯一值的分类变量的数据集,"low"、"medium" 和 "high":
df.CatVar.value_counts()
Out[93]:
Medium 35832
Low 25311
High 12527
Name: CatVar, dtype: int64
我正在尝试将唯一值的数量绘制为条形图。但是,以下代码按 ["Medium"、"Low"、"High"]
的顺序给出了条形图df.CatVar.value_counts().plot(kind="bar")
如何更改图中条形的顺序?
以下代码解决了我的问题:
df.CatVar.value_counts()[['Low', 'Medium', 'High']].plot(kind="bar")
有 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")
如果你不介意使用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']);