matplotlib 使用datetime.time和axvline绘制垂直线

w8biq8rn  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(189)

我正在尝试使用axvline函数来绘制datetime.time值,并看到此错误。请帮助。
代码如下:

  1. import datetime as dt
  2. from datetime import datetime
  3. import matplotlib.pyplot as plt
  4. i='wpt'
  5. x = [datetime.time(12,10), datetime.time(12, 15)]
  6. fig, axs = plt.subplots(3, sharex = True, figsize = (12,9), constrained_layout = True)
  7. axs[i].axvline(x[0], color = 'lightskyblue', ls = '--', lw = 1)

当我运行代码时,得到以下错误:

  1. TypeError: '>' not supported between instances of 'float' and 'datetime.time'

我在网上查了一下,没有发现使用datetime.time的axvline的解决方案

u3r8eeie

u3r8eeie1#

matplotlib需要一个数字x坐标,而不是一个日期时间对象。您需要将时间转换为数字,例如使用matplotlib.dates.date2num函数:

  1. import matplotlib.dates as mdates
  2. axs[i].axvline(mdates.date2num(datetime.combine(date.today(), x[0])), ...)

这会将时间转换为一个浮点数,表示自0001年1月1日以来的天数。Matplotlib会使用它的日期绘制机制来适当地格式化坐标轴。注意,我在这里使用了datetime.合并,通过添加今天的日期将时间转换为完整的datetime对象。

相关问题