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

如何在Python中可视化含重叠事件的Pandas事件序列数据

Python实现事件时间线可视化(支持重叠事件)

你可以用Matplotlib(静态图)或Plotly(交互式图)来实现需求,下面是具体实现方法:

一、数据准备

先把你的数据转为Pandas DataFrame:

import pandas as pd

data = {
    "事件类型": ["A", "B", "C", "A"],
    "开始时间": [1, 2.5, 9.5, 6],
    "结束时间": [3, 5, 11, 9]
}
df = pd.DataFrame(data)

二、Matplotlib实现(静态图,支持重叠错开)

如果需要手动控制重叠事件的显示位置,用Matplotlib更灵活:

  1. 处理重叠事件:给同一类型的重叠事件分配垂直偏移,避免图形重叠
# 按事件类型分组并按开始时间排序
df_sorted = df.sort_values(["事件类型", "开始时间"])
# 计算每个事件的重叠偏移量
df_sorted["偏移量"] = df_sorted.groupby("事件类型").apply(
    lambda group: group["开始时间"].apply(
        lambda s: sum((group["开始时间"] < s) & (group["结束时间"] > s))
    )
).reset_index(drop=True)
  1. 绘制图表
import matplotlib.pyplot as plt

# 映射事件类型到y轴位置
event_y_mapping = {typ: idx for idx, typ in enumerate(df_sorted["事件类型"].unique())}

plt.figure(figsize=(10, 4))

# 逐个绘制事件条形
for _, row in df_sorted.iterrows():
    # 计算当前事件的y位置(基础位置+偏移量)
    y = event_y_mapping[row["事件类型"]] + row["偏移量"] * 0.2
    # 绘制横向条形
    plt.barh(y, width=row["结束时间"] - row["开始时间"], left=row["开始时间"], height=0.15)

# 设置图表样式
plt.yticks(list(event_y_mapping.values()), list(event_y_mapping.keys()))
plt.xlabel("时间")
plt.title("事件时间线")
plt.tight_layout()
plt.show()

这段代码会把同一类型的重叠事件在y轴方向上错开显示,避免遮挡。

三、Plotly实现(交互式图,自动处理重叠)

如果需要交互式的图表(支持hover查看详情、缩放等),用Plotly更方便:

import plotly.express as px

# 绘制时间线图
fig = px.timeline(df, x_start="开始时间", x_end="结束时间", y="事件类型", color="事件类型")
# 设置y轴顺序为事件类型出现的顺序
fig.update_yaxes(categoryorder="category ascending")
# 调整布局
fig.update_layout(title="事件时间线", xaxis_title="时间")
# 显示图表
fig.show()

Plotly会自动将同一类型的重叠事件堆叠显示,交互体验更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:13:12