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

标签 python python-2.7 matplotlib

我尝试使用以下代码在具有日期时间 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)

最佳答案

问题是 matplotlib 使用它自己的日期/时间表示( float 天数),因此您必须先转换它们。此外,您必须告诉 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()

结果:

enter image description here

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

关于python - 如何使用 matplotlib 在日期时间轴上绘制矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31162780/

相关文章:

python - 在 Django 类基础 View 中创建自定义方法

python - 在 Python 脚本运行之间将持久变量保存在内存中

python-2.7 - 64位PC上找不到数据源名称或没有默认驱动程序的pyodbc错误

python-2.7 - 如何将一个 Pandas 数据框中的所有小时值与另一个数据框中的年度值相乘?

python - 如何相对于文本框放置图例?

python - 使用来自 python 的 LOAD DATA 从大型 csv 传输数据期间 MySQL 崩溃

Python XML 元素替换

python - ImportError at/No module named urls

python - 如何在绘图中添加粗体注释文本

python - 如何在Python中垂直拉伸(stretch)绘图