如何用Plotly Express生成按年份分组的月度累计值折线图(每月仅保留一个累计点)
如何用Plotly Express生成按年份分组的月度累计值折线图(每月仅保留一个累计点)
我刚接触Dash和Plotly才第二天,Python水平也还很有限😅。
我有一个从CSV导入的简单DataFrame,包含date(格式为%d/%m/%Y)和value两列。为了方便制作图表,我新增了两列:一列提取年份存为date_year,一列提取月份全称(比如January)存为date_months,代码如下:
df["date_year"] = pd.to_datetime(df['date'], format = '%d/%m/%Y').dt.strftime('%Y') df["date_months"] = pd.to_datetime(df['date'], format = '%d/%m/%Y').dt.strftime('%B')
靠着这两列,我已经能轻松实现通过下拉菜单选择年份后,展示该年份下月度值求和的柱状图,代码是:
fig = px.histogram(df_filtered[mask], x='date_months', y='value', histfunc='sum')
虽然代码可能不够优雅,但至少能用了。
现在我想做一个类似的图表,但要按年份分组,每个年份对应一条折线,每个月份只显示该月最后一个累计值点。我试了下面的代码,结果接近但不符合预期:
df_filtered["value_cumsum"] = df_filtered.groupby(['date_months','date_year'])['value'].cumsum() fig2 = px.line(df_filtered, x="date_months", y="value_cumsum", color='date_year')
现在的问题是,折线图里每个月有多个数据点,看起来像“锯齿”一样,我只想要每个月对应一个累计值点。
有没有人能给点思路?我不想写更多乱糟糟的“面条代码”了😂。
备注:内容来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

