合并具有相同范围但具有不同空间分辨率的xarray数据集

时间:2019-10-21 21:06:50

标签: python geospatial netcdf python-xarray

我有一个基于卫星的太阳诱发荧光(SIF)数据集和一个模拟降水量的数据集。我想将研究区域中每个像素的降水量与SIF进行比较。我的两个数据集的面积相同,但空间分辨率略有不同。我可以成功绘制整个时间的这些值,并在取整个区域的平均值时相互比较,但是我正在努力创建每个像素的散点图。

老实说,我不确定这是否是寻找沉淀对SIF的影响时比较这两个值的最佳方法,因此我愿意接受不同方法的想法。至于当前合并数据,我正在使用xr.combine_by_coords,但这给了我下面将要描述的错误。我也可以通过将netcdfs转换为geotiff,然后使用rasterio使其变形来完成此操作,但这似乎是进行这种比较的一种无效方法。到目前为止,这是我所拥有的:

import netCDF4
import numpy as np
import dask
import xarray as xr

rainy_bbox = np.array([
    [-69.29519955115512,-13.861261028444734],
    [-69.29519955115512,-12.384786628185896],
    [-71.19583431678012,-12.384786628185896],
    [-71.19583431678012,-13.861261028444734]])
max_lon_lat = np.max(rainy_bbox, axis=0)
min_lon_lat = np.min(rainy_bbox, axis=0)

# this dataset is available here: ftp://fluo.gps.caltech.edu/data/tropomi/gridded/
sif = xr.open_dataset('../data/TROPO_SIF_03-2018.nc')

# the dataset is global so subset to my study area in the Amazon
rainy_sif_xds = sif.sel(lon=slice(min_lon_lat[0], max_lon_lat[0]), lat=slice(min_lon_lat[1], max_lon_lat[1]))  

# this data can all be downloaded from NASA Goddard here either manually or with wget but you'll need an account on https://disc.gsfc.nasa.gov/: https://pastebin.com/viZckVdn
imerg_xds = xr.open_mfdataset('../data/3B-DAY.MS.MRG.3IMERG.201803*.nc4')

# spatial subset
rainy_imerg_xds = imerg_xds.sel(lon=slice(min_lon_lat[0], max_lon_lat[0]), lat=slice(min_lon_lat[1], max_lon_lat[1]))  

# I'm not sure the best way to combine these datasets but am trying this
combo_xds = xr.combine_by_coords([rainy_imerg_xds, rainy_xds])

当前,我在最后一行上似乎没有帮助RecursionError: maximum recursion depth exceeded in comparison。当我添加自变量join='left'时,来自rainy_imerg_xds数据集的数据位于combo_xds中,当我执行join='right'时,rainy_xds数据存在,如果我做join='inner'没有数据。我以为有一些内部插值功能,但似乎没有。

1 个答案:

答案 0 :(得分:1)

documentation from xarray非常简单地概述了该问题的解决方案。 MAX EFFDT允许您内插多个尺寸,并指定另一个数据集的x和y尺寸作为输出尺寸。因此,在这种情况下,它是通过

完成的
Plan_Type

enter image description here

xarray

enter image description here