Comparison to Xarray


For users coming from an Xarray background, much of UXarray’s design is familiar. This notebook showcases an example of transitioning a Structured Grid Xarray workflow to UXarray.

Imports

import matplotlib.pyplot as plt
import uxarray as ux
import xarray as xr
fig_size = 400
plot_kwargs = {"backend": "matplotlib", "aspect": 2, "fig_size": fig_size}

Data

It is common practice to resample unstructured grids to a structured representation for many analysis workflows to utilize familiar and reliable tools.

The datasets used in this example are meant to mimic this workflow, with a source Unstructured Grid and a Structured representation of that same grid.

Structured

base_path = "../../meshfiles/"
ds_path = base_path + "outCSne30.structured.nc"
xrds = xr.open_dataset(ds_path)
xrds
<xarray.Dataset> Size: 30kB
Dimensions:  (lat: 45, lon: 80)
Coordinates:
  * lat      (lat) int64 360B -90 -86 -82 -78 -74 -70 -66 ... 66 70 74 78 82 86
  * lon      (lon) float64 640B -180.0 -175.5 -171.0 ... 166.5 171.0 175.5
Data variables:
    psi      (lat, lon) float64 29kB ...

Unstructured

base_path = "../../meshfiles/"
grid_filename = base_path + "outCSne30.grid.ug"
data_filename = base_path + "outCSne30.data.nc"
uxds = ux.open_dataset(grid_filename, data_filename)
uxds
<xarray.UxDataset> Size: 43kB
Dimensions:  (n_face: 5400)
Dimensions without coordinates: n_face
Data variables:
    psi      (n_face) float64 43kB ...

Example Workflows

Below are two simple visualization workflows that someone would run into

  • Creating a single plot

  • Creating a pair of plots (two different color maps are used to mimic different data)

Xarray

xrds["psi"].plot(figsize=(12, 5), cmap="inferno")
<matplotlib.collections.QuadMesh at 0x7f1c543efaf0>
../../_images/1f9a5203fe575813955901e3b2202e018cd8eaa5e0591d627f63592cb52f6b11.png
fig, axs = plt.subplots(nrows=2, figsize=(12, 10))

xrds["psi"].plot(cmap="inferno", ax=axs[0])
xrds["psi"].plot(cmap="cividis", ax=axs[1])
<matplotlib.collections.QuadMesh at 0x7f1c54182ef0>
../../_images/930324cd74b232db5b6a96c5a8a7c38ea390751659a96331bf5712f39dde0c9f.png

UXarray

uxds["psi"].plot(width=1000, height=500, cmap="inferno")