You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly单图中绘制同日期范围的逐年时间序列对比图

需求:单张Plotly图表对比多年时间序列数据

我需要将多年的时间序列数据按相同的日-月起止范围绘制在单张Plotly图表中,直接对比2018年、2019年等不同年份的数据。当前代码实现的是分年绘制子图,希望调整为单图展示。

相关信息

  • 数据文件:decremento_municipio_202305291512.csv
  • 现有子图效果:各年份数据以独立子图形式分开展示

现有代码

from datetime import date, datetime

import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

df_decremento_municipio = pd.read_csv('app/data/decremento_municipio_202305291512.csv', index_col="view_date") 
template_graph = {
    "layout": {
        "modebar": {
            "remove": [
                "zoom",
                "pan",
                "select",
                "zoomIn",
                "zoomOut",
                "lasso2d",
                "autoscale",
            ]
        },
        "separators": ".",
        "showlegend": True,
    }
}

df_decremento_municipio.index = pd.to_datetime(df_decremento_municipio.index)
df_decremento_municipio["year"] = df_decremento_municipio.index.year

min_date = df_decremento_municipio.index.date.min()
max_date = df_decremento_municipio.index.date.max()

df=pd.Series(name="area_ha", dtype="float64")
for ano in df_decremento_municipio.index.year.unique()[
    df_decremento_municipio.index.year.unique() > 2016
]:
    # 移除2015和2016年(数据质量极差)

    df_por_ano = df_decremento_municipio[df_decremento_municipio["year"] == ano]
    dff_acumulacao = df_por_ano["area_ha"].groupby([df_por_ano.index]).sum().cumsum()
    df = df.append(dff_acumulacao)

fig = go.Figure()

# 各年份数据的起始日期
start = ["2020-01-01", "2018-01-04", "2021-01-05" , "2022-01-05", "2019-01-01", "2023-01-10", "2017-12-27"]
# 各年份数据的结束日期
end =   ["2020-12-31", "2018-12-27", "2021-12-16", "2022-12-31", "2019-12-22",  "2023-05-03", "2017-01-26"]

years = df.index.year.unique()[df.index.year.unique()>2016].sort_values()

for idx, (s,e) in enumerate(zip(start, end)):
    tmp = df[(df.index >= start[idx]) & (df.index <= end[idx])]
    fig.add_trace(go.Scatter(x=tmp.index,
                             y=tmp,
                             name=str(years[idx]),
                             mode='lines',
                            ))

fig.update_layout(height=600, xaxis_tickformat='%d-%m')
fig.update_xaxes(type='date')

fig.show()

内容的提问来源于stack exchange,提问作者dogosousa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:15:19