如何在Plotly Python的新冠每日病例图中添加事件标记?
Plotly Python 添加事件标记的实现方案
针对你在COVID-19病例趋势图中添加封锁、病毒变种等事件标记的需求,Plotly有两种实用的实现方式:
方法1:添加垂直参考线+固定文本注释
适合需要在特定日期位置添加贯穿整个图表的竖线,并搭配固定文字标签的场景,比如标记"首次封锁":
import plotly.graph_objects as go import pandas as pd # 模拟COVID病例数据(替换成你的真实数据) dates = pd.date_range(start='2020-03-01', end='2020-05-01', freq='D') cases = [i**1.2 + 100 for i in range(len(dates))] # 初始化图表 fig = go.Figure(data=go.Scatter(x=dates, y=cases, mode='lines', name='每日病例')) # 添加首次封锁的垂直参考线 fig.add_shape( type='line', x0='2020-03-15', x1='2020-03-15', # 封锁日期 y0=0, y1=1, xref='x', yref='paper', # yref='paper'让线贯穿整个Y轴高度 line=dict(color='red', width=2, dash='dash') ) # 添加对应注释文本 fig.add_annotation( x='2020-03-15', y=max(cases)*0.8, # 文本位置设为病例峰值的80%高度 text='首次封锁', showarrow=True, arrowhead=1 ) fig.update_layout(title='COVID-19每日病例趋势', xaxis_title='日期', yaxis_title='病例数') fig.show()
关键参数说明:
yref='paper':让竖线从图表底部延伸到顶部,不受Y轴数据范围影响dash='dash':设置虚线样式,和趋势线区分开- 注释的
y参数可以根据数据范围调整,避免遮挡趋势线
方法2:添加事件标记点+悬浮提示/直接文本
适合需要添加离散标记点,且希望鼠标悬浮时显示详细事件信息的场景:
import plotly.graph_objects as go import pandas as pd # 模拟病例数据 dates = pd.date_range(start='2020-03-01', end='2020-05-01', freq='D') cases = [i**1.2 + 100 for i in range(len(dates))] # 定义事件列表(替换成你的真实事件) events = { '日期': ['2020-03-15', '2020-04-01'], '事件': ['首次封锁', 'Alpha变种出现'], '标记位置': [max(cases)*0.9, max(cases)*0.7] # 每个事件的Y轴位置 } event_df = pd.DataFrame(events) event_df['日期'] = pd.to_datetime(event_df['日期']) # 初始化图表 fig = go.Figure() # 添加病例趋势线 fig.add_trace(go.Scatter(x=dates, y=cases, mode='lines', name='每日病例')) # 添加事件标记点 fig.add_trace(go.Scatter( x=event_df['日期'], y=event_df['标记位置'], mode='markers+text', # 同时显示标记点和文本 text=event_df['事件'], textposition='top center', marker=dict(color='orange', size=10), name='关键事件' )) fig.update_layout(title='COVID-19每日病例趋势', xaxis_title='日期', yaxis_title='病例数') fig.show()
如果只需要鼠标悬浮时显示事件信息,把mode改成markers,并添加hovertext=event_df['事件']即可。
内容的提问来源于stack exchange,提问作者ignacywawa
相关产品推荐
相关产品推荐

