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

如何使用Plotly Express在单张图中绘制来自两个DataFrame的多条时间线(甘特图)

如何用Plotly Express将多个DataFrame的时间线(甘特图)合并到同一张图中

你遇到的问题很典型——直接两次调用px.timeline()没办法把两个DataFrame的时间线叠加到同一张图里,因为每次调用px.timeline()都会生成一个全新的Figure对象,而不是在已有图上追加内容。不过用Plotly Express实现需求其实很简单,下面给你两种可行的方案:

方法一:合并DataFrame后绘制(推荐)

这是最贴合Plotly Express设计理念的方式,通过给不同数据集添加区分标识,一次性生成合并后的时间线:

  1. 给每个DataFrame新增一个分类列,用来标记不同的任务类型(比如你代码里的"Towing"和"Hook-Up")
  2. 合并两个DataFrame为一个统一的数据集
  3. 用合并后的DataFrame调用px.timeline(),通过color参数自动区分不同类别

示例代码:

import plotly.express as px
import pandas as pd

# 给两个DataFrame添加分类标识
chosen_data3["Task Type"] = "Towing"
chosen_data4["Task Type"] = "Hook-Up"

# 合并成一个DataFrame
combined_df = pd.concat([chosen_data3, chosen_data4], ignore_index=True)

# 绘制合并后的时间线
fig = px.timeline(
    combined_df,
    x_start="Start Date",
    x_end="End Date",
    y="new",
    color="Task Type",  # 用分类列区分颜色
    hover_data=["Duration [Hours]", "Hs [m]"]  # 自定义悬停显示的字段
)

# 可以根据需求调整布局,比如反转y轴顺序
fig.update_yaxes(autorange="reversed")
fig.show()

这种方式不仅能把所有时间线整合到一张图里,还能自动生成图例、区分颜色,悬停时也能展示你需要的所有字段,比用graph_objs循环添加Trace的写法简洁得多。

方法二:手动叠加Plotly Express的Trace

如果你不想合并DataFrame,也可以分别生成两个时间线的Figure,然后把第二个Figure的Trace手动添加到第一个里面:

import plotly.express as px

# 生成第一个数据集的时间线
fig = px.timeline(chosen_data3, x_start="Start Date", x_end="End Date", y="new", color_discrete_sequence=["#000000"])
# 生成第二个数据集的时间线
fig2 = px.timeline(chosen_data4, x_start="Start Date", x_end="End Date", y="new", color_discrete_sequence=["#4169E1"])

# 将fig2的所有Trace添加到fig中
for trace in fig2.data:
    trace.name = "Hook-Up"  # 手动设置图例名称
    fig.add_trace(trace)

# 调整图例和布局
fig.update_layout(legend_title_text="Task Type")
fig.show()

不过这种方法需要手动处理颜色、图例名称等细节,不如第一种方法优雅,只适合特殊场景下使用。

为什么你之前的尝试无效?

你写的fig2 = px.timeline(..., ax = fig)是错误的——ax是Matplotlib的参数,Plotly Express并不支持。每次调用px.timeline()都会创建一个独立的Figure,所以第二次调用的结果只会生成新图,不会叠加到第一个图上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:19:10