如何处理xarray中与时间有关的坐标?

时间:2019-07-25 13:21:53

标签: python python-xarray

我想使用xarray处理具有时间相关坐标的数据集。更准确地说,我处理以风暴为中心的预测,这导致尺寸(时间,纬度,经度),但纬度,经度是风暴移动时时间的函数。

在xarray中似乎没有本地方法可以处理这种情况,但是可能的解决方法是什么? 独立地存储每个时间步很麻烦,但是,使用xr.concat可以始终存储一个纬度经度... 我想知道是否应用time1.interp_like(time2)可以帮助。本质上,将所有时间步长都用nan填充到经度到纬度的最大扩展... 有什么想法吗?

1 个答案:

答案 0 :(得分:4)

如果您要绘制目标,则可以使用non-dimension coordinates解决此问题。

请考虑以下玩具示例。这里的ji是“逻辑”维度,不对应任何物理位置(只是数组索引),而lonlat是与时间相关的地理区域坐标。

import xarray as xr
import numpy as np

# create a dummy dataset
ds = xr.Dataset({'foo': (('time', 'j', 'i'), np.random.rand(10, 30, 30))})

# add non-dimension coordinates that depend on time
ds.coords['lon'] = 190 + 0.25 * ds.i + 0.01 * ds.time
ds.coords['lat'] = 24 + 0.25 * ds.j + 0.02 * ds.time
print(ds)

# select a specific time and plot
ds.foo.sel(time=5).plot(x='lon', y='lat')

数据集代表是

<xarray.Dataset>
Dimensions:  (i: 30, j: 30, time: 10)
Coordinates:
    lon      (i, time) float64 190.0 190.0 190.0 190.0 ... 197.3 197.3 197.3
    lat      (j, time) float64 24.0 24.02 24.04 24.06 ... 31.39 31.41 31.43
Dimensions without coordinates: i, j, time
Data variables:
    foo      (time, j, i) float64 0.7443 0.2943 0.4479 ... 0.5386 0.3574 0.5597

这个数字看起来像这样:

output of plot

您可以使这种方法适应您所描述的情况