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 setting.
When flatten_values is False (the default, unless overriden by the selected profile), the native field shape defines these dimensions, and their 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").to_fieldlist()
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").to_fieldlist()
ds_xr = ds_fl.to_xarray()
ds_xr.sizes, ds_xr.coords
'Grid' object has no attribute 'to_distinct_latlon'
[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").to_fieldlist()
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").to_fieldlist()
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)
[ ]: