Xarray engine: field dimensions
[1]:
import earthkit.data as ekd
When converting a GRIB fieldlist to Xarray with to_xarray() the last one or two dimensions representing the field values depend on the grid type and the flatten_values settings.
When flatten_values is False (the is the default, depending on the profile) the field shape is used to form the field dimensions, whose names vary with the grid type. Otherwise, a single dimension called “values” will represent a field.
Regular grids
[2]:
ds_fl = ekd.from_source("sample", "pl.grib")
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords
[2]:
(Frozen({'forecast_reference_time': 4, 'step': 2, 'level': 2, 'latitude': 19, 'longitude': 36}),
Coordinates:
* forecast_reference_time (forecast_reference_time) datetime64[ns] 32B 202...
* step (step) timedelta64[ns] 16B 00:00:00 06:00:00
* level (level) int64 16B 500 700
* latitude (latitude) float64 152B 90.0 80.0 ... -80.0 -90.0
* longitude (longitude) float64 288B 0.0 10.0 ... 340.0 350.0)
[3]:
ds_xr = ds_fl.to_xarray(flatten_values=True)
ds_xr.sizes, ds_xr.coords
[3]:
(Frozen({'forecast_reference_time': 4, 'step': 2, 'level': 2, 'values': 684}),
Coordinates:
* forecast_reference_time (forecast_reference_time) datetime64[ns] 32B 202...
* step (step) timedelta64[ns] 16B 00:00:00 06:00:00
* level (level) int64 16B 500 700
latitude (values) float64 5kB ...
longitude (values) float64 5kB ...)
Regular grids on a projection
[4]:
ds_fl = ekd.from_source("sample", "lambert_conformal.grib")
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords
[4]:
(Frozen({'y': 475, 'x': 475}),
Coordinates:
latitude (y, x) float64 2MB ...
longitude (y, x) float64 2MB ...)
[5]:
ds_xr = ds_fl.to_xarray(flatten_values=True)
ds_xr.sizes, ds_xr.coords
[5]:
(Frozen({'values': 225625}),
Coordinates:
latitude (values) float64 2MB ...
longitude (values) float64 2MB ...)
Unstructured grids
For unstructured grids (like reduced Gaussian) only the “values” dimension is generated and flatten_values makes no effect.
[6]:
ds_fl = ekd.from_source("sample", "reduced_gg_O32.grib1")
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords
[6]:
(Frozen({'step': 2, 'values': 5248}),
Coordinates:
* step (step) timedelta64[ns] 16B 00:00:00 06:00:00
latitude (values) float64 42kB ...
longitude (values) float64 42kB ...)
Spherical harmonics
For non-gridded data only the “values” dimension is genereated and flatten_values makes no effect.
[7]:
ds_fl = ekd.from_source("sample", "sh_t32.grib")
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords
[7]:
(Frozen({'step': 2, 'values': 1122}),
Coordinates:
* step (step) timedelta64[ns] 16B 00:00:00 06:00:00)
[ ]: