我正在创建HRRR模型输出的横截面,我已经使用xarray和pynio作为引擎读取了grib文件,然后将这些文件转换为netcdf,这样我就可以在我的windows机器上使用它们,因此我想知道这是否导致了这些问题。
下面是使用xarray:Imgur读取netcdf后我的数据集的样子
读入数据后,我尝试通过解析数据来遵循Metpy横截面/ Xarray教程:
data = ds.metpy.parse_cf()这产生了这个新的数据集:Imgur,它创建了crs坐标,所以我假设它工作得有点正确。
在此之后,我创建了一个包含700mb RH、风和海拔(不同数据集)的等高线地图,其中我从数据数据集中解析了RH,并提取了x和y
RH = data.metpy.parse_cf('RH_P0_L100_GLC0')
x, y = RH.metpy.coordinates('x', 'y')这一切都起作用了,我可以生成一个漂亮的图,没有问题。所以下一步我想做一个横截面。按照文档中的示例操作:
start = (40.3847, -120.5676)
end = (39.2692, -122.3784)
cross = cross_section(data, start, end)它产生了这些错误:Imgur
因此,我尝试使用上面的RH变量,因为
RH.metpy.x 给出了x维度。但是跑步
cross = cross_section(RH, start, end)相反,给出了这个错误:Imgur
所以我想知道我是不是在解析原始数据集的过程中错过了一个步骤,或者是grib到netcdf的转换搞砸了什么,或者使用metpy是否有可能做到这一点?
一般来说,我只是想创建一个类似于示例中的横截面:https://unidata.github.io/MetPy/latest/examples/cross_section.html#sphx-glr-examples-cross-section-py
作为一个额外的问题,是否有可能填充地块下的地形?
发布于 2019-02-06 22:31:04
目前,MetPy's cross section interpolation依赖于Dataset/DataArray中存在的x和y维度作为维度坐标(请参阅xarray的文档here中的描述)。在您的数据集中,ygrid_0和xgrid_0的x和y维度被列为没有坐标的维度,这就是问题所在。
然而,由于这种情况在气象数据文件中经常遇到,MetPy目前的实现可能过于严格。我建议在MetPy's issue tracker上开一个问题。
关于您的额外问题,只要您的地形级别数据与您的数据位于相同的垂直坐标中,您就可以使用matplotlib中的fill_between()方法来填充地块下的地形。
发布于 2020-04-21 19:48:04
我也有几乎同样的问题。
ValueError:数据缺少必需的坐标信息。验证您的数据是否已由MetPy使用正确的x和y维度坐标进行了解析,并为每个变量添加了正确投影的crs坐标。
如果我尝试这样做:
cross = cross_section(data, start, end)xarray看起来像这样:
<xarray.Dataset>
Dimensions: (bnds: 2, height: 61, height_2: 1, height_3: 60, height_4: 61, height_5: 1, lat: 101, lev: 1, lev_2: 1, lev_3: 1, lon: 121, time: 24)
Coordinates:
* height (height) float64 1.0 2.0 3.0 4.0 ... 58.0 59.0 60.0 61.0
* height_3 (height_3) float64 1.0 2.0 3.0 4.0 ... 57.0 58.0 59.0 60.0
* lev (lev) float64 0.0
* lev_2 (lev_2) float64 400.0
* lev_3 (lev_3) float64 800.0
* lon (lon) float64 -30.0 -29.5 -29.0 -28.5 ... 29.0 29.5 30.0
* lat (lat) float64 -10.0 -9.5 -9.0 -8.5 ... 38.5 39.0 39.5 40.0
crs object Projection: latitude_longitude
* height_2 (height_2) float64 10.0
* time (time) float64 2.017e+07 2.017e+07 ... 2.017e+07 2.017e+07
* height_4 (height_4) float64 1.0 2.0 3.0 4.0 ... 58.0 59.0 60.0 61.0
* height_5 (height_5) float64 2.0
Dimensions without coordinates: bnds
Data variables:
height_bnds (height, bnds) float64 ...
height_3_bnds (height_3, bnds) float64 ...
lev_bnds (lev, bnds) float64 ...
lev_2_bnds (lev_2, bnds) float64 ...
lev_3_bnds (lev_3, bnds) float64 ...
z_ifc (height, lat, lon) float32 ...
topography_c (lat, lon) float32 ...
fis (lat, lon) float32 ...
con_gust (time, height_2, lat, lon) float32 ...
gust10 (time, height_2, lat, lon) float32 ...
u (time, height_3, lat, lon) float32 ...我的意思是有一个很晚的网格..。是否有变通办法将cross_section用于lat lon grid?或者我可以将lat lon重命名为x和y?
最好的
https://stackoverflow.com/questions/54524847
复制相似问题