【问题标题】:Pandas DataFrame - How to make a stacked area graph stack (matplotlib)Pandas DataFrame - 如何制作堆叠面积图堆栈(matplotlib)
【发布时间】:2018-06-04 20:59:40
【问题描述】:

我正在尝试将 pandas DataFrame 中的数据转换为堆叠区域图,但似乎无法将其堆叠。

数据的格式

index | datetime (yyyy/mm/dd) | name | weight_change

每天测量 6 个不同的人。

我希望堆叠图显示日期时间 (x) 上的 weight_change (y),但 6 个人中的每一个都显示 weight_change

我最接近它的是:

df = df.groupby['datetime', 'name'], as_index=False).agg({'weight_change': 'sum'})
agg = df.groupby('datetime').sum()
agg.plot.area()

这会生成 weight_change 值聚合的面积图(每天每个人 weight_change 的总和),但我不知道如何像这里的不同值一样为每个人拆分它:

我尝试了各种各样的事情,但都没有运气。有什么想法吗?

【问题讨论】:

标签: python pandas dataframe matplotlib jupyter


【解决方案1】:

您的数据的简化版本:

df = pd.DataFrame(dict(days=range(4)*2,
                       change=np.random.rand(8)*2.,
                       name=['John',]*4 + ['Jane',]*4))

df:

    change  days    name
0   0.238336    0   John
1   0.293901    1   John
2   0.818119    2   John
3   1.567114    3   John
4   1.295725    0   Jane
5   0.592008    1   Jane
6   0.674388    2   Jane
7   1.763043    3   Jane

现在我们可以简单地使用pyplotstackplot

import matplotlib.pyplot as plt

days = df.days[df.name == 'John']
plt.stackplot(days, df.change[df.name == 'John'],
              df.change[df.name == 'Jane'])

这会产生以下情节:

【讨论】:

  • 谢谢。当我尝试创建图形时,我现在得到 ValueError:除了连接轴之外的所有输入数组维度必须完全匹配。我相信这是指每个人的体重列的数据长度不同的事实。你将如何改变每个的长度以使它们匹配?
  • 实际上我使用 .head 人为地做了同样的事情,但现在输入类型支持 TypeError: ufunc 'isfinite' nit,并且根据强制转换规则无法安全地将输入强制转换为任何支持的类型'安全的''。我现在会谷歌一些,但任何解决这个问题的想法都值得赞赏。
  • stackplot 仅在所有y 数据具有相同长度(和相同x 值)时才有效。如果不是这种情况,您需要先调整数据。在您最初的问题中,您声称每个人每天都被测量,所以我不认为您的数据存在差距......
猜你喜欢
  • 1970-01-01
  • 2018-11-26
  • 2012-04-06
  • 2021-03-24
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2021-11-29
  • 2017-07-08
相关资源
最近更新 更多