matplotlib堆栈栏按日期(月和年)分组

时间:2018-10-09 21:17:35

标签: python pandas matplotlib plot seaborn

考虑具有两列的过度简化的数据框:日期和值。

dates = pd.DatetimeIndex(['2017-01-01 00:00:00', '2017-01-05 02:00:00','2017-03-01 02:00:00', '2018-01-01 03:00:00', '2018-01-21 04:00:00','2018-03-01 03:00:00', '2018-03-22 04:00:00'], dtype='datetime64[ns]')
my_df = pd.DataFrame({"Date":dates,"Values":[5,1,2,4,6,3,5]})
my_df

enter image description here

我的目标是绘制堆栈条,使x_axis具有month_year,并且该条会显示一堆值。例如,对于2017年1月,我希望看到2种颜色,其中5和1总计为6,依此类推。

由于这是一个与group-by_date有关的问题,我想知道如何获取基于月-年的值列表,以便可以将它们正确地堆叠在一起,然后再进行如下for循环:

for each month_year:
     plt.bar(month_year, list_of_values_per_month_year, color='#whatever',)

请注意,并非每个月都有一个值,有些月份有n个值。

当然,除非我的方法从根本上讲是复杂的,而且有一种更平滑的方法可以做到。

1 个答案:

答案 0 :(得分:1)

您需要先创建pivot表,然后创建plot堆栈栏

my_df.Date=my_df.Date.dt.strftime('%Y-%m')
my_df['col']=my_df.groupby('Date').cumcount()
my_df.pivot(index='Date',columns='col',values='Values').plot(kind='bar',stacked=True)

enter image description here