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

如何在Plotly冰柱图中设置X轴为时间线并调整矩形长度?

Plotly冰柱图实现时间轴X轴与时长映射

完全可以通过调整矩形长度来表示时间,同时保留冰柱图的层级结构,核心是利用冰柱图的参数绑定时间维度,实现时间线与层级结构的结合。

核心实现思路

  • 时间数值化映射:将起始/结束时间转换为可计算的数值(如时间戳、相对天数),用这些数值定义每个节点的起始位置与结束位置,矩形长度即为时间跨度
  • 层级关系保留:通过parents参数维持原有的父子层级,labels定义各节点名称,确保结构逻辑不变
  • 时间轴格式化:将X轴从数值轴转换为时间轴,让刻度显示为直观的日期/时间格式

代码示例

import plotly.express as px
import pandas as pd
from datetime import datetime

# 构造包含层级、时间区间的示例数据
data = pd.DataFrame({
    "节点名称": ["项目A", "任务1", "任务2", "子任务1-1", "子任务2-1"],
    "父节点": ["", "项目A", "项目A", "任务1", "任务2"],
    "开始时间": [
        datetime(2024, 1, 1),
        datetime(2024, 1, 2),
        datetime(2024, 1, 5),
        datetime(2024, 1, 2),
        datetime(2024, 1, 5)
    ],
    "结束时间": [
        datetime(2024, 1, 10),
        datetime(2024, 1, 4),
        datetime(2024, 1, 9),
        datetime(2024, 1, 3),
        datetime(2024, 1, 7)
    ]
})

# 计算时长(天数),转换时间为时间戳用于轴定位
data["时长(天)"] = (data["结束时间"] - data["开始时间"]).dt.days
data["开始时间戳"] = data["开始时间"].astype(int) // 10**9
data["结束时间戳"] = data["结束时间"].astype(int) // 10**9

# 生成冰柱图
fig = px.icicle(
    data,
    names="节点名称",
    parents="父节点",
    values="时长(天)",  # 用时长定义矩形长度
    x="开始时间戳",
    x_end="结束时间戳"
)

# 配置X轴为时间格式
fig.update_layout(
    xaxis=dict(
        type="date",
        tickformat="%Y-%m-%d",
        title="时间线"
    ),
    margin=dict(t=50, l=25, r=25, b=50)
)

fig.show()

注意细节

  • 若需要小时/分钟级的精细时间展示,只需调整时间戳计算精度,同时修改X轴的tickformat为%Y-%m-%d %H:%M即可
  • 父节点的时间范围建议覆盖所有子节点的区间,避免视觉上的断层
  • 可通过color参数绑定任务类型或层级字段,实现自定义颜色区分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:04:53