python - 基于日期时间数据在 matplotlib 中使用 axvline 添加垂直线

标签 python datetime matplotlib axvline

我正在尝试使用 axvline 将垂直线添加到使用 matplotlib 的折线图中,但遇到了重复出现的错误。我一直在寻找解决方案并阅读此处的建议 How to draw vertical lines on a given plot in matplotlib但他们并没有专门考虑使用日期时间。这里讨论了一个解决方案 matplotlib plot_date() add vertical line at specified date此处给出了类似的答案 How do you plot a vertical line on a time series plot in Pandas?这很有帮助,但是当我实现建议时(建议基本上是添加 plt.axvline(dt.datetime(2020, 9, 21)),我的折线图将所有数据压缩到一个点并在右侧添加一条垂直线在图表末尾 like so

这是我的代码:

Australia_data.set_index('date')['new_cases'].plot()
sns.set(font_scale=1.4)
Australia_data.set_index('date')['new_cases'].plot(figsize=(12, 10), linewidth=2.5)
plt.xlabel("Date", labelpad=15)
plt.ylabel("New Cases", labelpad=15)
plt.title("Australia daily COVID-19 cases", y=1.02, fontsize=22)
plt.axvline(dt.datetime(2020, 9, 21))

真的不确定这里出了什么问题,任何建议将不胜感激!

最佳答案

您应该能够使用 pandas.Timestamp 和 Python datetime 对象作为 axvline 的 x 坐标:

from datetime import datetime
from matplotlib import pyplot as plt
import pandas as pd

# dummy dataframe with a datetime index:
df = pd.DataFrame({'v': range(12)},
                  index=pd.date_range('2020', periods=12, freq='MS'))

df.plot()
# using a pandas timestamp:
plt.axvline(pd.Timestamp("2020-06-01"), color='r')
# using a datetime object:
plt.axvline(datetime(2020,8,1), color='g')

给出:

plot result

版本:Python 3.8.7 x86-64、pandas 1.2.1、matplotlib 3.3.3

关于python - 基于日期时间数据在 matplotlib 中使用 axvline 添加垂直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66127918/

相关文章:

python - 将包含多行数据的 .txt 转换为 .csv

python - python 3.3.1连接mysql数据库密码错误

python - 如何从 namedtuple 实例列表中创建 pandas DataFrame(带有索引或多索引)?

python - 理解python编译

javascript - 如何将日期时间值附加到表单数据并在 Controller 中接收它

python - 如何使 pyplot 散点标记不透明?

c# - 仅在 Razor 中获取日期时间的 MM/dd/yyyy

python - 从 Pandas Dataframe 中每个 Id 的第一个时间戳中减去最后一个时间戳

python - 你能改变cartopy中的虹膜立方体投影吗

python - 带日期的 Matplotlib - 更改每月数据的标签和刻度