【问题标题】:Coordinating basemap quiver and matplotlib arrow协调底图箭袋和 matplotlib 箭头
【发布时间】:2017-03-17 11:26:52
【问题描述】:

我正在尝试比较 matplotlib 中网格模型输出位置(通过底图上的箭袋)和分散的站点(通过 matplotlib 箭头)之间的风矢量。两者的位置都以纬度/经度为单位,但风矢量以米/秒为单位。

当组合时,我希望颜色和长度随大小而变化,并且对于箭袋和箭头数据以相同的方式缩放两种质量。我在下面给出了一个示例,其中箭袋图看起来不错并且以绝对长度(英寸)缩放。我不知道该怎么做才能使箭头()匹配。在示例中,我将其除以 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()

【问题讨论】:

    标签: python numpy matplotlib matplotlib-basemap


    【解决方案1】:

    您需要通过x,y = m(lon, lat)将地图坐标转换为笛卡尔坐标,之后plt.quiver(x,y, u, v)m.quiver(x,y,u,v)会做同样的工作。

    【讨论】:

      【解决方案2】:

      从 matplotlib 文档中看不太清楚(在我看来),但quiver 确实接受所有 X、Y、U 和 V 的一维数组,它们不需要统一隔开。底图文档弄错了,或者至少更不清楚。因此,只要将分散的站点数据形成一维数组,就可以了。

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

      # 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 颜色图)。

      请注意,如果您开始使用圆柱型投影以外的任何东西(并且如果您的 U 和 V 以东西和南北表示),则需要使用rotate_vector 方法。

      【讨论】:

      • 说得好。我尝试了 quiver,遇到了一个问题,文档让我不敢对非网格数据执行此操作。也感谢有关 rotate_vector 的提示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多