【问题标题】:Plot cumulative values based on column value - matplotlib/python根据列值绘制累积值 - matplotlib/python
【发布时间】:2021-11-04 09:28:03
【问题描述】:

目标是根据具有 3 列的数据框绘制每个模型的累积值:

date_time model cum_value
2021-01-12 A 10
2021-01-12 A 20
2021-01-12 B 50
2021-01-12 B 70

结果应该是一个折线图,每个模型 A 和 B 都有一条线(在图例中提到) x 轴应该是日期,y 轴应该是 cum_values

到目前为止我试过这个 data.plot(kind=line,x='date_time', y='cum_values)

我得到了正确的轴,但线条混乱了 我想过为每个模型拆分数据框,但必须有一种方法可以在不拆分表格的情况下进行绘图

希望你能帮忙!

【问题讨论】:

  • 仅供参考:彻底回答问题非常耗时。如果您的问题已解决,请通过接受最适合您的需求的解决方案表示感谢。 位于答案左上角的 / 箭头下方。如果出现更好的解决方案,则可以接受新的解决方案。如果您的声望超过 15,您也可以使用 / 箭头对答案的有用性进行投票。 如果解决方案不能回答问题,请发表评论What should I do when someone answers my question?。谢谢

标签: python pandas dataframe matplotlib seaborn


【解决方案1】:

您应该使用seaborn.lineplot 并利用hue 参数作为'model' 列:

sns.lineplot(data = df, x = 'date_time', y = 'cum_value', hue = 'model')

代码示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np


df = pd.DataFrame({'date_time': np.repeat(pd.date_range(start = '2021-01-01', end = '2021-01-10', freq = 'D'), 2)})
df['model'] = len(df)//2*['A', 'B']
df['cum_value'] = np.random.randint(0, 100, len(df))
df = df.groupby(by = ['model', 'date_time']).sum().groupby(level = 0).cumsum().reset_index()


fig, ax = plt.subplots()

sns.lineplot(ax = ax, data = df, x = 'date_time', y = 'cum_value', hue = 'model')

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    相关资源
    最近更新 更多