使用二维栅格阵列生成流图
Generate Streamplot With 2D Raster Arrays
我正在尝试使用来自网格化分析的 u 分量和 v 分量风在 Matplotlib 中生成流图,但我不确定如何将这些数组编译到 Streamplot 函数中。这些数据是二维的,采用 GeoTIFF 格式,并使用 xarray/rioxarray 读入 Python,如下所示:
import rioxarray as rxr
import numpy as np
ugrd = '/path/to/file/rtma2p5_ucomp.tif'
vgrd = '/path/to/file/rtma2p5_vcomp.tif'
ucomp = rxr.open_rasterio(ugrd)
ux, uy = np.meshgrid(ucomp['x'], ucomp['y'])
vcomp = rxr.open_rasterio(vgrd)
vx, vy = np.meshgrid(vcomp['x'], vcomp['y'])
X, Y = ucomp['x'], ucomp['y']
# Uncertainty on U,V
stream = plt.streamplot(X,Y,U,V)
根据 Streamplot 文档,我可以利用 rioxarray 将一维网格数组作为函数的 X 和 Y 参数传递。但是,我不确定如何处理 U 和 V 组件,因为在执行 numpy meshgrid 之后,两者都是二维网格划分为 x 和 y 组件。
我可以采取哪些额外步骤将每个二维风分量传递到函数中?
最简单的方法肯定是使用 xarray.Dataset.plot.streamplot
:
ds = xr.Dataset({'u': ucomp, 'v': 'vcomp'})
ds.plot.streamplot(x="x", y="y", u="u", v="v")
如果你想用 matplotlib 代替,你就快到了!正如您提到的,参数确实需要是一维数组。 np.meshgrid
已经在生成 x 和 y 二维坐标标签(您已将它们分配给 ux, uy
以及 vx, vy
- 我假设它们是相同的)。因此,对于每个 (x, y)
点索引 ucomp
和 vcomp
,都有一组对应的坐标 (ux[i, j], uy[i, j])
。这使您可以重塑所有四个数组以获得所需的输入:
plt.streamplot(
ux.ravel(),
uy.ravel(),
ucomp.values.ravel(),
vcomp.values.ravel(),
)
我正在尝试使用来自网格化分析的 u 分量和 v 分量风在 Matplotlib 中生成流图,但我不确定如何将这些数组编译到 Streamplot 函数中。这些数据是二维的,采用 GeoTIFF 格式,并使用 xarray/rioxarray 读入 Python,如下所示:
import rioxarray as rxr
import numpy as np
ugrd = '/path/to/file/rtma2p5_ucomp.tif'
vgrd = '/path/to/file/rtma2p5_vcomp.tif'
ucomp = rxr.open_rasterio(ugrd)
ux, uy = np.meshgrid(ucomp['x'], ucomp['y'])
vcomp = rxr.open_rasterio(vgrd)
vx, vy = np.meshgrid(vcomp['x'], vcomp['y'])
X, Y = ucomp['x'], ucomp['y']
# Uncertainty on U,V
stream = plt.streamplot(X,Y,U,V)
根据 Streamplot 文档,我可以利用 rioxarray 将一维网格数组作为函数的 X 和 Y 参数传递。但是,我不确定如何处理 U 和 V 组件,因为在执行 numpy meshgrid 之后,两者都是二维网格划分为 x 和 y 组件。
我可以采取哪些额外步骤将每个二维风分量传递到函数中?
最简单的方法肯定是使用 xarray.Dataset.plot.streamplot
:
ds = xr.Dataset({'u': ucomp, 'v': 'vcomp'})
ds.plot.streamplot(x="x", y="y", u="u", v="v")
如果你想用 matplotlib 代替,你就快到了!正如您提到的,参数确实需要是一维数组。 np.meshgrid
已经在生成 x 和 y 二维坐标标签(您已将它们分配给 ux, uy
以及 vx, vy
- 我假设它们是相同的)。因此,对于每个 (x, y)
点索引 ucomp
和 vcomp
,都有一组对应的坐标 (ux[i, j], uy[i, j])
。这使您可以重塑所有四个数组以获得所需的输入:
plt.streamplot(
ux.ravel(),
uy.ravel(),
ucomp.values.ravel(),
vcomp.values.ravel(),
)