更改堆叠条形图熊猫中的情节顺序

时间:2020-09-23 19:18:10

标签: python pandas

我有一个看起来像这样的数据框:

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年代,然后向右增加十年?

enter image description here

1 个答案:

答案 0 :(得分:2)

pivot_table产生排序后的索引,因此您可以在枢轴之后reindex来确保正确的打印顺序。

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

enter image description here


另一种选择,您可以使用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