首页 文章

协调底图箭袋和matplotlib箭头

提问于
浏览
1

我试图在网格模型输出位置(通过底图上的箭头)和分散的站点(通过matplotlib箭头)之间比较matplotlib中的风矢量 . 两者的位置均为纬度/经度,但风向量以m / s为单位 .

当组合时,我希望颜色和长度按幅度变化,并且对于箭头和箭头数据,两种质量的缩放方式相同 . 我在下面给出了一个示例,其中箭袋图看起来很好并且以绝对长度(英寸)缩放 . 我不知道该怎么做才能匹配arrow() . 在这个例子中,我把它除以SCALE,以便了解我希望最终图像看起来像什么 .

import numpy as np
import matplotlib.pylab as plt
from mpl_toolkits.basemap import Basemap

X, Y = np.meshgrid(np.arange(-123,-121,0.3),np.arange(37,39,0.3))
U = np.cos(X+123)*12
V = np.sin(Y-37)*12
mag = np.hypot(U,V)

fig,ax=plt.subplots(1)
m=Basemap(projection ='cyl',resolution='f',llcrnrlat=37,llcrnrlon=-123,
          urcrnrlat=39,urcrnrlon=-121,ax=ax)

quiv = m.quiver(X,Y,U,V,mag,zorder=2,latlon=True,scale=30,scale_units='inches')

# Scattered points won't be on the grid
x0=X[2,2] - 0.025
y0=Y[2,2]

u0=U[2,2]
v0=V[2,2] + 0.5 
SCALE = 72.
plt.arrow(x0,y0,u0/SCALE,v0/SCALE)

plt.show()

1 回答

  • 1

    matplotlib文档(在我看来)中并不是非常清楚,但 quiver 确实接受X,Y,U和V的所有XD,它们不需要均匀间隔 . 底图文档出错了,或者至少更加不清楚 . 因此,只要您将分散的站点数据形成一维数组,就应该没问题 .

    我通过用这个替换你的散点部分为你的情节添加了一些随机箭头(如果你使用相同的种子,你应该得到相同的箭头):

    # Make scattered locations
    np.random.seed(33)
    x0 = np.random.rand(5)*2.0 - 123
    y0 = np.random.rand(5)*2.0 + 37
    
    # Make some velocities
    u0 = np.random.randn(5)*3 + 10
    v0 = np.random.randn(5)*3 + 10
    
    q2 = m.quiver(x0, y0, u0, v0, latlon=True, scale=30, scale_units='inches')
    

    这是我得到的情节(我默认使用YlGnBu_r色图) .
    regular grid plus scattered locations

    请注意,如果您开始使用圆柱型投影以外的任何内容(如果您的U和V在东西和南北表示),则需要使用rotate_vector方法旋转矢量以匹配投影 .

相关问题