如何使用matplotlib在日期时间轴上绘制矩形?

发布于 2021-01-29 14:58:46

我尝试使用以下代码在具有日期时间x轴的图形上绘制矩形:

from datetime import datetime, timedelta
from matplotlib.patches import Rectangle
import matplotlib.pyplot as plt

# Create new plot
fig = plt.figure()
ax = fig.add_subplot(111)

# Create rectangle
startTime = datetime.now()
width = timedelta(seconds = 1)
endTime = startTime + width
rect = Rectangle((startTime, 0), width, 1, color='yellow')

# Plot rectangle
ax.add_patch(rect)   ### ERROR HERE!!! ###
plt.xlim([startTime, endTime])
plt.ylim([0, 1])
plt.show()

但是,我得到了错误:

TypeError: unsupported operand type(s) for +: 'float' and 'datetime.timedelta'

怎么了 (我正在使用matplotlib 1.0.1版)

关注者
0
被浏览
138
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    问题在于,matplotlib使用其自己的日期/时间表示形式(浮动天数),因此您必须先进行转换。此外,您将不得不告诉xaxis它应该具有日期/时间刻度和标签。下面的代码可以做到这一点:

    from datetime import datetime, timedelta
    from matplotlib.patches import Rectangle
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    
    # Create new plot
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    # Create rectangle x coordinates
    startTime = datetime.now()
    endTime = startTime + timedelta(seconds = 1)
    
    # convert to matplotlib date representation
    start = mdates.date2num(startTime)
    end = mdates.date2num(endTime)
    width = end - start
    
    # Plot rectangle
    rect = Rectangle((start, 0), width, 1, color='yellow')
    ax.add_patch(rect)
    
    # assign date locator / formatter to the x-axis to get proper labels
    locator = mdates.AutoDateLocator(minticks=3)
    formatter = mdates.AutoDateFormatter(locator)
    ax.xaxis.set_major_locator(locator)
    ax.xaxis.set_major_formatter(formatter)
    
    # set the limits
    plt.xlim([start-width, end+width])
    plt.ylim([-.5, 1.5])
    
    # go
    plt.show()
    

    结果:

    在此处输入图片说明

    注意 :Matplotlib 1.0.1 非常 旧。我不能保证我的例子会起作用。您应该尝试更新!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看