如果一个轴包含时间,如何在matplotlib中绘制箭头?

2024-06-28 11:21:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有点混乱:我想画一个风力预报图,在预报时间t(在x轴上)在风速wind(y轴)和指向风的方向的箭头。箭头的尺寸应为绘图高度的给定分数,例如任意确定为绘图高度的1/15。由于绘图会自动缩放到列表中的最大风速,因此如下所示:

arrowlength = np.max(wind) / 15.0

这将产生以绘图Y为单位的箭头长度。问题是X单位对于绘图来说是不兼容的,因为我使用的是日期时间。因此,当我执行以下操作时,matplotlib会大吃一惊(如果x轴不是日期时间,则该代码应该可以工作):

^{pr2}$

当然,当datetimet(循环中分别是x)被传递给Arrow函数的地方,这一点也不例外。在

我想也是同样的道理,这是一个非常普遍的问题:如何将直线和其他注释放置到一个坐标网格中,而这个坐标网格在X和Y中的单位不相同?在


Tags: 网格绘图列表高度尺寸时间单位箭头
1条回答
网友
1楼 · 发布于 2024-06-28 11:21:08

您可以使用matplotlib.dateshttp://matplotlib.org/api/dates_api.html)将日期转换为轴坐标,使用date2num()方法。在下面的示例中,我创建了一个从(2015年4月5日,10日)到(2015年4月7日,20日)的箭头:

import matplotlib.pyplot as plt
import matplotlib.dates as md

import datetime

fig = plt.figure()
ax = fig.add_subplot(111)

t0 = datetime.datetime(2015,4,1)
t = [t0+datetime.timedelta(days=j) for j in xrange(20)]
y = range(20)
ax.plot(t, y)

x0 = md.date2num(datetime.datetime(2015,4,5))
y0 = 10
xw = md.date2num(datetime.datetime(2015,4,7)) - x0
yw = 10
arr = plt.Arrow(x0, y0, xw, yw, edgecolor='black')
ax.add_patch(arr)
arr.set_facecolor('b')
fig.autofmt_xdate()
plt.show()

enter image description here

相关问题 更多 >