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

如何基于起止日期数据在时间趋势图中绘制药物水平参考线

实现思路

你需要的是限定在指定日期区间内的分段水平参考线,不要用贯穿全轴的axhline,直接用matplotlib的hlines接口实现即可,整体分3步走:

  • 先把DataFrame里的字符串格式日期转成标准datetime格式,匹配现有图表的时间轴坐标
  • 给每条药物参考线匹配和对应趋势线对齐的y轴垂直位置
  • 传入起止日期、y位置参数批量绘制3条分段水平线
具体代码实现

首先做数据预处理:

import pandas as pd
import matplotlib.pyplot as plt

# 转换日期列为时间格式,解决字符串无法匹配时间轴坐标的问题
data['Start Date'] = pd.to_datetime(data['Start Date'])
data['End Date'] = pd.to_datetime(data['End Date'])

# 给每个药物匹配对应y轴位置,数值和你现有趋势线的垂直位置保持一致即可
# 示例是按药物顺序分配y=1/2/3,你可以根据自己的图表实际y值调整
drug_y_position = {'Katrex': 1, 'Acyloir': 2, 'Zelorix': 3}
data['y'] = data['Drug Name'].map(drug_y_position)

然后在你已经绘制完趋势线的坐标轴对象上直接加参考线:

# ax是你现有图表的matplotlib坐标轴对象,如果你是用plt直接绘图也可以不传ax,直接调用plt.hlines
ax.hlines(
    y = data['y'],
    xmin = data['Start Date'],
    xmax = data['End Date'],
    colors = ['tab:blue', 'tab:orange', 'tab:green'], # 颜色和对应药物趋势线保持一致即可
    linestyles = '--', # 参考线用虚线区分主趋势线,可自行调整为实线/点线
    linewidth = 2.5,
    alpha = 0.7 # 加透明度避免遮挡原有趋势线
)

# 调整完后如果需要刷新图例可以重新调用ax.legend()
注意事项
  • 如果你的三种药物趋势线是绘制在同一个y轴数值区间(不是分面、不是按分类分配固定y位置),只需要把drug_y_position里的数值改成你想要放参考线的y值即可,比如想把三条参考线都放在y=0.8的位置,就把三个映射值都改成0.8
  • 如果你用的是seaborn、pandas内置plot等基于matplotlib的绘图库,这个方法完全通用,只要拿到当前绘图的ax对象即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:27:13