首页 > 解决方案 > 大熊猫中按日期分组的分类区域堆栈图

问题描述

如果我的 x 轴只是一个数字列表,我找到了实现堆栈图的方法。

import pandas as pd 
import matplotlib.pyplt as plt
d = {'time_key': {0: '2021-03-01',
  1: '2021-03-01',
  2: '2021-03-01',
  3: '2021-03-01'},
 'target': {0: 2, 1: 1, 2: 0, 3: 3},
 'count': {0: 400, 1: 300, 2: 200, 3: 100},
 'fraction': {0: 0.4, 1: 0.3, 2: 0.2, 3: 0.1}}
df = pd.DataFrame(d)
plt.stackplot(range(2), s[s.target==0].fraction, s[s.target==1].fraction,
          s[s.target==2].fraction, s[s.target==3].fraction)

在此处输入图像描述

但我想将情节推广到许多日期列表。

  d = {'time_key': {0: '2021-03-01',
  1: '2021-03-01',
  2: '2021-03-01',
  3: '2021-03-01',
  4: '2021-04-01',
  5: '2021-04-01',
  6: '2021-04-01',
  7: '2021-04-01',
  8: '2021-05-01',
  9: '2021-05-01',
  10: '2021-05-01',
  11: '2021-05-01'},
 'target': {0: 2,
  1: 1,
  2: 0,
  3: 3,
  4: 2,
  5: 1,
  6: 0,
  7: 3,
  8: 2,
  9: 1,
  10: 0,
  11: 3},
 'count': {0: 163,
  1: 110,
  2: 90,
  3: 38,
  4: 113,
  5: 97,
  6: 56,
  7: 34,
  8: 85,
  9: 57,
  10: 42,
  11: 16},
 'fraction': {0: 0.18091009988901222,
  1: 0.1220865704772475,
  2: 0.09988901220865705,
  3: 0.042175360710321866,
  4: 0.12541620421753608,
  5: 0.1076581576026637,
  6: 0.06215316315205328,
  7: 0.03773584905660377,
  8: 0.09433962264150944,
  9: 0.06326304106548279,
  10: 0.04661487236403995,
  11: 0.017758046614872364}}

我想按升序将日期分配给 x 轴,以查看比例的动态。
这是一种以适当方式实现它的方法吗?

所需的近似输出图(虽然我需要 time_key x 轴): 在此处输入图像描述

标签: pythonpandastime-series

解决方案


尝试:

dfp = df.set_index(['time_key','target'])['count'].unstack()
dfp.div(dfp.sum(axis=1), axis=0).plot.bar(stacked=True)

输出:

在此处输入图像描述


推荐阅读