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

Python绘制时间序列图时指定日期添加vlines垂直线报错如何解决

问题解决方法

报错核心原因

  • 类型不匹配:plt.vlines()接收的x轴位置参数是字符串格式的日期,和图表x轴已有的datetime类型刻度不兼容,无法转换为坐标轴单位触发报错
  • 参数缺失:plt.vlines()的必填入参为x(垂直线x坐标)、ymin(垂直线下端y值)、ymax(垂直线上端y值)三个,删除0,600会导致参数不足报错

额外说明:你代码里covid_indonesia['date'] = pd.to_datetime(covid_indonesia['date'])属于冗余操作,加载数据集时已经通过parse_dates=["date"]将日期列转为了datetime格式,且该操作放在绘图之后也不会对已经绘制的x轴产生作用,还会触发pandas的SettingWithCopyWarning警告。

修正方案

只需要将传入plt.vlines()的日期字符串转为datetime格式即可,修正后的完整代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 加载数据时已完成日期格式转换,无需后续重复处理
df_covid = pd.read_csv("https://covid.ourworldindata.org/data/owid-covid-data.csv", sep=",", parse_dates=["date"])
# 筛选印尼数据
covid_indonesia = df_covid[df_covid["location"] == "Indonesia"]

# 绘图
plt.figure(figsize=(20,7))
sns.lineplot(data=covid_indonesia, x="date", y="new_cases")
# 给vlines传入datetime格式的日期参数,和x轴类型匹配,可自定义颜色、线型方便识别
plt.vlines(pd.to_datetime(['2020-01-01', '2021-05-13', '2021-07-03']), ymin=0, ymax=600, color='red', linestyle='--')
plt.show()

如果希望垂直线自动适配当前y轴的上下限,不需要手动指定0和600,可以用以下写法动态获取y轴范围:

# 放在sns.lineplot绘图之后、vlines之前执行
ymin, ymax = plt.gca().get_ylim()
plt.vlines(pd.to_datetime(['2020-01-01', '2021-05-13', '2021-07-03']), ymin=ymin, ymax=ymax, color='red', linestyle='--')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:39:04