如果一个轴包含时间,如何在 matplotlib 中绘制箭头?
How to draw an arrow in matplotlib if one axis contains time?
这里有点混乱:我想通过在预测时间t(在x轴上)在风速[=20=上绘制一系列箭头来绘制风力预报]wind(y 轴),箭头指向风吹来的方向。箭头的尺寸应该是地块高度的给定分数,例如任意确定为地块高度的 1/15。由于绘图自动缩放到 wind 列表中的最大风速,因此:
arrowlength = np.max(wind) / 15.0
这应该会产生以绘图 Y 单位表示的箭头长度。问题似乎是 X 单位与绘图目的不兼容,因为我正在为其使用日期时间。因此,当我执行以下操作时,matplotlib 的内裤出现了问题(这是应该工作的代码 如果 x 轴不是日期时间):
for x,u,v,y in zip(t, windu, windv, wind):
xcomp = arrowlength * sin(u/v)
ycomp = arrowlength * cos(u/v)
arr = Arrow(x-xcomp/2, y-ycomp/2, x+xcomp/2, y+ycomp/2, edgecolor='black')
ax.add_patch(arr)
arr.set_facecolor('b')
这当然会在日期时间 t(x 分别在循环中)传递给 Arrow 函数。
我想很多情况都是一样的,这是一个非常普遍的问题:如何将线和其他注释放置到 X 和 Y 中没有相同单位的坐标网格中?
您可以使用 matplotlib.dates
(http://matplotlib.org/api/dates_api.html) 将日期转换为轴坐标,使用 date2num()
方法。在下面的示例中,我创建了一个从 (April 5 2015, 10) 到 (April 7 2015, 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()
这里有点混乱:我想通过在预测时间t(在x轴上)在风速[=20=上绘制一系列箭头来绘制风力预报]wind(y 轴),箭头指向风吹来的方向。箭头的尺寸应该是地块高度的给定分数,例如任意确定为地块高度的 1/15。由于绘图自动缩放到 wind 列表中的最大风速,因此:
arrowlength = np.max(wind) / 15.0
这应该会产生以绘图 Y 单位表示的箭头长度。问题似乎是 X 单位与绘图目的不兼容,因为我正在为其使用日期时间。因此,当我执行以下操作时,matplotlib 的内裤出现了问题(这是应该工作的代码 如果 x 轴不是日期时间):
for x,u,v,y in zip(t, windu, windv, wind):
xcomp = arrowlength * sin(u/v)
ycomp = arrowlength * cos(u/v)
arr = Arrow(x-xcomp/2, y-ycomp/2, x+xcomp/2, y+ycomp/2, edgecolor='black')
ax.add_patch(arr)
arr.set_facecolor('b')
这当然会在日期时间 t(x 分别在循环中)传递给 Arrow 函数。
我想很多情况都是一样的,这是一个非常普遍的问题:如何将线和其他注释放置到 X 和 Y 中没有相同单位的坐标网格中?
您可以使用 matplotlib.dates
(http://matplotlib.org/api/dates_api.html) 将日期转换为轴坐标,使用 date2num()
方法。在下面的示例中,我创建了一个从 (April 5 2015, 10) 到 (April 7 2015, 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()