如何在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更灵活:
- 处理重叠事件:给同一类型的重叠事件分配垂直偏移,避免图形重叠
# 按事件类型分组并按开始时间排序 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)
- 绘制图表
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
相关产品推荐
相关产品推荐

