[英]Change order of plot in stacked bar plot 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 年代开始并向右增加十年?
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.