【问题标题】:Pandas plot bar order categoriesPandas 绘图条顺序类别
【发布时间】:2021-12-20 20:45:15
【问题描述】:

我有一个包含三个唯一值“低”、“中”和“高”的分类变量的数据集:

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

如何更改图中条形的顺序?

【问题讨论】:

    标签: python pandas plot categories


    【解决方案1】:

    有 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")
    

    【讨论】:

    • 我觉得你的第一种方法是我也做过的。但是由于您的解决方案更详细,并且您的第二个建议是针对特定问题的更好解决方案,因此您赢得了我的“接受此答案”;)
    • @ViggoTW - 非常感谢。
    【解决方案2】:

    如果你不介意使用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']);
    

    【讨论】:

    • 谢谢。我试图在引入最少数量的新库的同时解决这个问题。但是,对于已经使用 Seaborn 并且正在为类似问题苦苦挣扎的人来说,您的解决方案将很高兴:) (+1)
    【解决方案3】:

    以下代码解决了我的问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多