我正在嘗試使用網格分析中的 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 組件。
我可以采取哪些額外步驟將每個二維風分量傳遞到函式中?
uj5u.com熱心網友回復:
最簡單的方法肯定是使用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 2D 坐標標簽(您已將它們分配給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(),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/443159.html
