这里有些混乱:我想通过在风速风(y轴)的预测时间t(x轴)绘制一系列箭头,并绘制指向风吹动方向的箭头来绘制风的预测。箭头的尺寸应为绘图高度的给定分数,例如,任意确定为绘图高度的1/15。由于该图自动缩放为风列表中的最大风速,因此可以得出:
arrowlength = np.max(wind) / 15.0
Run Code Online (Sandbox Code Playgroud)
这将产生以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')
Run Code Online (Sandbox Code Playgroud)
当然,这是将日期时间t(分别为循环中的x)传递给Arrow函数的槽。
我想很多时候都是这样,这是一个非常笼统的问题:如何将一条线和其他注解放置到在X和Y中没有相同单位的坐标网格中?
您可以使用matplotlib.dates(http://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()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
2475 次 |
| 最近记录: |