【问题标题】:Python-ggplot: Adding moving average to plotPython-ggplot:将移动平均线添加到绘图中
【发布时间】:2020-07-23 10:17:24
【问题描述】:
p = ggplot(cases, aes(x="Specimen date", y="Daily lab-confirmed cases", group = 1)) + geom_point() + geom_line() + labs(title = "Daily COVID-19 Cases")
p.save(filename = date_today, height=5, width=15, units = 'in', dpi=1000)

这是我当前的代码,用于从包含英格兰 COVID-19 病例的 DataFrame 中绘制图表,然后将其保存。我正在尝试添加类似于 Worldometer 图表的趋势线(如下所示)。

我还不能发布图片,所以我将提供示例here

This is what my graph currently looks like.

我正在努力实现'3 天移动平均线''7 天移动平均线'

【问题讨论】:

    标签: python statistics moving-average python-ggplot plotnine


    【解决方案1】:

    stat_smooth,你可以用移动平均线来平滑。

    例如,您最终可能会添加类似的代码

    + stat_smooth(method='mavg', method_args={'window': 3}, color='cyan')
    + stat_smooth(method='mavg', method_args={'window': 7}, color='blue')
    

    但这不会给你一个图例,因为移动平均线不是数据框中的变量(具有相应的值),即给定你想要绘制的数据并不整洁。因此,如果您想要一个图例,则必须计算移动平均值,创建一个 tidy dataframe 并以整齐的形式绘制计算的平均值。

    怎么样?使用pandas.melt 例如

    # Compute moving averages
    cases['mavg_3'] = cases['Daily lab-confirmed cases'].rolling(window=3).mean()
    cases['mavg_7'] = cases['Daily lab-confirmed cases'].rolling(window=7).mean()
    
    # Convert data Long/tidy format
    cases_long = cases.melt(
        id_vars=['Specimen date', 'Daily lab-confirmed cases'],
        value_vars=['mavg_3', 'mavg_7'],
        var_name='mavg_type',
        value_name='mavg_value'
    )
    
    # Plot tidy data
    (ggplot(cases_long, aes(x="Specimen date", y="Daily lab-confirmed cases"))
     + geom_point()
     + geom_line(aes(y='mavg_value', color='mavg_type'), na_rm=True)
    )
    

    【讨论】:

    • 我必须对此进行一些研究,因为我对数据框等还很陌生。但是,您为我指明了正确的方向,非常感谢您!
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多