Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 协调基础图箭图和matplotlib箭头_Python_Numpy_Matplotlib_Matplotlib Basemap - Fatal编程技术网

Python 协调基础图箭图和matplotlib箭头

Python 协调基础图箭图和matplotlib箭头,python,numpy,matplotlib,matplotlib-basemap,Python,Numpy,Matplotlib,Matplotlib Basemap,我试图比较matplotlib中网格模型输出位置(通过基础地图上的箭袋)和分散站(通过matplotlib箭头)之间的风矢量。两者的位置均以lat/lon为单位,但风矢量以m/s为单位 当组合起来时,我希望颜色和长度随大小而变化,对于箭袋和箭头数据,这两种质量的缩放方式相同。我在下面给出了一个例子,其中箭袋图看起来不错,并以绝对长度(英寸)进行缩放。我不知道该怎么做才能使arrow()匹配。在本例中,我将其按比例划分,以了解我希望最终图像的外观 import numpy as np import

我试图比较matplotlib中网格模型输出位置(通过基础地图上的箭袋)和分散站(通过matplotlib箭头)之间的风矢量。两者的位置均以lat/lon为单位,但风矢量以m/s为单位

当组合起来时,我希望颜色和长度随大小而变化,对于箭袋和箭头数据,这两种质量的缩放方式相同。我在下面给出了一个例子,其中箭袋图看起来不错,并以绝对长度(英寸)进行缩放。我不知道该怎么做才能使arrow()匹配。在本例中,我将其按比例划分,以了解我希望最终图像的外观

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()

matplotlib文档(在我看来)并不十分清楚,但是
quiver
确实接受所有X、Y、U和V的1D数组,这些数组不需要均匀分布。basemap文档有错,或者至少更加不清楚。因此,只要将分散的桩号数据形成1D阵列,就可以了

我通过将“分散点”部分替换为该部分向绘图中添加了一些随机箭头(如果使用相同的种子,则应获得相同的箭头):

这是我得到的图(默认情况下我使用YlGnBu__r颜色贴图)。


请注意,如果您开始使用柱形投影以外的任何投影(如果U和V以东西和南北方向表示),则需要使用该方法旋转矢量以匹配投影。

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

说得好。我尝试了quiver,但遇到了一个问题,文档把我吓跑了,不敢对非网格数据执行此操作。感谢您提供有关旋转矢量的提示。
# 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')