【问题标题】:Change order of plot in stacked bar plot pandas更改堆积条形图 pandas 中的绘图顺序
【发布时间】:2020-09-24 03:35:29
【问题描述】:

我有一个如下所示的数据框:

Category    counts  Decade
0   1.0 55  80s
1   2.0 27  80s
2   3.0 13  80s
3   4.0 7   80s
4   5.0 4   80s
0   1.0 55  90s
1   2.0 31  90s
2   3.0 8   90s
3   5.0 7   90s
4   4.0 3   90s
0   1.0 84  00s
1   2.0 35  00s
2   3.0 10  00s
3   4.0 6   00s
4   5.0 1   00s
0   1.0 137 10s
1   2.0 32  10s
2   3.0 13  10s
3   4.0 12  10s
4   5.0 1   10s

然后我将其绘制为堆积条形图:

df.pivot_table('counts', 'Decade', 'Category', 'first').plot.bar(stacked=True)

但是,这不是按时间顺序组织我的酒吧的。我意识到它们是字符串,但我认为它会按照数据框的顺序从上到下绘制条形图。如何强制情节从 80 年代开始并向右增加十年?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    pivot_table 产生一个排序索引,因此您可以在枢轴之后使用reindex 以确保正确的绘图顺序。

    (df.pivot_table('counts', 'Decade', 'Category', 'first')
       .reindex(['80s', '90s', '00s', '10s'])
       .plot.bar(stacked=True, figsize=(4,3))
    


    另一种选择,您可以使用 CategoricalDtype 强制执行自定义排序:

    import pandas as pd
    
    my_cat = pd.CategoricalDtype(categories=['80s', '90s', '00s', '10s'], ordered=True)
    df['Decade'] = df['Decade'].astype(my_cat)
    

    所以现在当你旋转它时,它会被正确排序以便在没有 reindex 的情况下进行绘图

    df.pivot_table('counts', 'Decade', 'Category', 'first')
    
    #Category  1.0  2.0  3.0  4.0  5.0
    #Decade                           
    #80s        55   27   13    7    4
    #90s        55   31    8    3    7
    #00s        84   35   10    6    1
    #10s       137   32   13   12    1
    

    【讨论】:

    • 甜,我没有意识到发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2012-09-17
    相关资源
    最近更新 更多