{ "cells": [ { "cell_type": "markdown", "id": "be9e8355-ab4e-4239-8a84-6cf688e1c5b0", "metadata": {}, "source": [ "# Multi-resolution RiOMar data\n", "\n", "## Context\n", "\n", "### Purpose\n", "\n", "The use of multiscale Zarr in combination with the Discrete Global Grid System (DGGS) for Earth Observation aims to enhance the efficiency and scalability of storing, accessing, and analyzing large geospatial datasets. Multiscale Zarr allows for efficient compression and chunking of data, enabling rapid access to high-resolution imagery and other spatial datasets. When integrated with DGGS, which provides a hierarchical, cell-based representation of the Earth's surface, this approach facilitates seamless multi-resolution analysis, improves interoperability, and supports advanced geospatial processing and visualization, ultimately enabling more effective monitoring and understanding of environmental changes.\n", "\n", "### Description\n", "\n", "In this notebook, we will:\n", "- Open 3 DGGS-transformed RiOMar data files, each with different resolution (levels)\n", "- Organise the 3 datasets into one data trees (3 groups)\n", "- Show how it could be used e.g. select one area where we will have coarser resolution and the rest (for instance closer to the coast) with higher resolution.\n", "\n", "## Contributions\n", "\n", "### Notebook\n", "\n", "- Anne Fouilloux (author), Simula Research Laboratory (Norway), @annefou\n", "- Tina Odaka (author), IFREMER (France), @tinaok\n", "\n", "\n", "## Bibliography and other interesting resources\n", "\n", "- [Zarr pyramids at scale](https://medium.com/pangeo/zarr-pyramids-at-scale-4c252fff3d86)\n", "- [OME-Zarr](https://ome-zarr.readthedocs.io/en/stable/index.html)\n" ] }, { "cell_type": "markdown", "id": "3a476282-e489-462a-8d16-6fa0db74271c", "metadata": {}, "source": [ "## Install missing libraries \n", "- Or packages that needs to have specific version" ] }, { "cell_type": "code", "execution_count": 1, "id": "8f985284-18ce-4294-aa67-c52a2a78af3b", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: xdggs in /srv/conda/envs/notebook/lib/python3.12/site-packages (0.1.2.dev9+gb57dfb9)\n", "Requirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (2025.1.1)\n", "Requirement already satisfied: cdshealpix in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.7.1)\n", "Requirement already satisfied: h3ronpy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.22.0)\n", "Requirement already satisfied: typing-extensions in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (4.12.2)\n", "Requirement already satisfied: lonboard>=0.9.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.9.3)\n", "Requirement already satisfied: pyproj>=3.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (3.6.1)\n", "Requirement already satisfied: matplotlib in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (3.9.2)\n", "Requirement already satisfied: arro3-core>=0.4.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (0.4.5)\n", "Requirement already satisfied: pooch in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xdggs) (1.8.2)\n", "Requirement already satisfied: anywidget<0.10.0,>=0.9.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (0.9.13)\n", "Requirement already satisfied: geopandas>=0.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (1.0.1)\n", "Requirement already satisfied: palettable<4.0.0,>=3.3.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (3.3.3)\n", "Requirement already satisfied: pandas<3,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (2.2.2)\n", "Requirement already satisfied: pyarrow>=14.0.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (17.0.0)\n", "Requirement already satisfied: shapely<3,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from lonboard>=0.9.3->xdggs) (2.0.5)\n", "Requirement already satisfied: contourpy>=1.0.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.2.1)\n", "Requirement already satisfied: cycler>=0.10 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (4.53.1)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.4.5)\n", "Requirement already satisfied: numpy>=1.23 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (1.26.4)\n", "Requirement already satisfied: packaging>=20.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (24.1)\n", "Requirement already satisfied: pillow>=8 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (10.4.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (3.1.2)\n", "Requirement already satisfied: python-dateutil>=2.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from matplotlib->xdggs) (2.8.2)\n", "Requirement already satisfied: certifi in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pyproj>=3.3->xdggs) (2024.7.4)\n", "Requirement already satisfied: astropy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from cdshealpix->xdggs) (6.1.2)\n", "Requirement already satisfied: platformdirs>=2.5.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pooch->xdggs) (4.2.2)\n", "Requirement already satisfied: requests>=2.19.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pooch->xdggs) (2.32.3)\n", "Requirement already satisfied: ipywidgets>=7.6.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (8.1.3)\n", "Requirement already satisfied: psygnal>=0.8.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.11.1)\n", "Requirement already satisfied: pyogrio>=0.7.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from geopandas>=0.13->lonboard>=0.9.3->xdggs) (0.9.0)\n", "Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas<3,>=2->lonboard>=0.9.3->xdggs) (2024.1)\n", "Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas<3,>=2->lonboard>=0.9.3->xdggs) (2024.1)\n", "Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->xdggs) (1.16.0)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (3.7)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from requests>=2.19.0->pooch->xdggs) (1.26.19)\n", "Requirement already satisfied: pyerfa>=2.0.1.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (2.0.1.4)\n", "Requirement already satisfied: astropy-iers-data>=0.2024.7.1.0.34.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (0.2024.8.5.0.32.23)\n", "Requirement already satisfied: PyYAML>=3.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->cdshealpix->xdggs) (6.0.2)\n", "Requirement already satisfied: comm>=0.1.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.2)\n", "Requirement already satisfied: ipython>=6.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (8.17.2)\n", "Requirement already satisfied: traitlets>=4.3.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (5.14.3)\n", "Requirement already satisfied: widgetsnbextension~=4.0.11 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (4.0.11)\n", "Requirement already satisfied: jupyterlab-widgets~=3.0.11 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (3.0.11)\n", "Requirement already satisfied: decorator in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (5.1.1)\n", "Requirement already satisfied: jedi>=0.16 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.19.1)\n", "Requirement already satisfied: matplotlib-inline in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.1.7)\n", "Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (3.0.38)\n", "Requirement already satisfied: pygments>=2.4.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.18.0)\n", "Requirement already satisfied: stack-data in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.6.2)\n", "Requirement already satisfied: pexpect>4.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (4.9.0)\n", "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.8.4)\n", "Requirement already satisfied: ptyprocess>=0.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.7.0)\n", "Requirement already satisfied: wcwidth in /srv/conda/envs/notebook/lib/python3.12/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.13)\n", "Requirement already satisfied: executing>=1.2.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.0.1)\n", "Requirement already satisfied: asttokens>=2.1.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (2.4.1)\n", "Requirement already satisfied: pure-eval in /srv/conda/envs/notebook/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget<0.10.0,>=0.9.0->lonboard>=0.9.3->xdggs) (0.2.3)\n", "Requirement already satisfied: healpy in /srv/conda/envs/notebook/lib/python3.12/site-packages (1.18.0)\n", "Requirement already satisfied: numpy>=1.19 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from healpy) (1.26.4)\n", "Requirement already satisfied: astropy in /srv/conda/envs/notebook/lib/python3.12/site-packages (from healpy) (6.1.2)\n", "Requirement already satisfied: pyerfa>=2.0.1.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (2.0.1.4)\n", "Requirement already satisfied: astropy-iers-data>=0.2024.7.1.0.34.3 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (0.2024.8.5.0.32.23)\n", "Requirement already satisfied: PyYAML>=3.13 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (6.0.2)\n", "Requirement already satisfied: packaging>=19.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from astropy->healpy) (24.1)\n", "Requirement already satisfied: zarr==2.18.4 in /srv/conda/envs/notebook/lib/python3.12/site-packages (2.18.4)\n", "Requirement already satisfied: asciitree in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (0.3.3)\n", "Requirement already satisfied: numpy>=1.24 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (1.26.4)\n", "Requirement already satisfied: fasteners in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (0.17.3)\n", "Requirement already satisfied: numcodecs!=0.14.0,!=0.14.1,>=0.10.0 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from zarr==2.18.4) (0.13.1)\n", "Requirement already satisfied: numcodecs==0.13.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (0.13.1)\n", "Requirement already satisfied: numpy>=1.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from numcodecs==0.13.1) (1.26.4)\n", "Requirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.12/site-packages (2025.1.1)\n", "Requirement already satisfied: numpy>=1.24 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray) (1.26.4)\n", "Requirement already satisfied: packaging>=23.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray) (24.1)\n", "Requirement already satisfied: pandas>=2.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from xarray) (2.2.2)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.1->xarray) (2.8.2)\n", "Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.1->xarray) (2024.1)\n", "Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from pandas>=2.1->xarray) (2024.1)\n", "Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=2.1->xarray) (1.16.0)\n" ] } ], "source": [ "!pip install xdggs\n", "!pip install healpy\n", "!pip install -U zarr==2.18.4\n", "!pip install numcodecs==0.13.1\n", "!pip install -U xarray" ] }, { "cell_type": "markdown", "id": "4921aa63-976a-49f8-a60c-a87d639435c1", "metadata": {}, "source": [ "## Import Libraries" ] }, { "cell_type": "code", "execution_count": 2, "id": "b4198507-c5e4-4359-8cb0-f93949046301", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import warnings\n", "import healpy as hp\n", "#import matplotlib.pyplot as plt\n", "import numpy as np\n", "import xarray as xr\n", "import xdggs\n", "#import fsspec\n", "\n", "warnings.filterwarnings(\"ignore\")\n", "xr.set_options(display_max_rows=27)" ] }, { "cell_type": "markdown", "id": "e65e0959-07bd-476d-a718-b9caef7115bc", "metadata": {}, "source": [ "## Open the same RiOMar sample dataset in 3 different resolutions (different levels)" ] }, { "cell_type": "code", "execution_count": 3, "id": "a9238826-b275-410e-8e2d-bb91bf9aa768", "metadata": {}, "outputs": [], "source": [ "url_1 = \"https://data-fair2adapt.ifremer.fr/riomar/small_healpix_14.zarr\"\n", "url_2 = \"https://data-fair2adapt.ifremer.fr/riomar/small_healpix_13.zarr\"\n", "url_3 = \"https://data-fair2adapt.ifremer.fr/riomar/small_healpix.zarr\"" ] }, { "cell_type": "code", "execution_count": 4, "id": "c9ef41dc-06d5-4d46-a741-fc261287ce93", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 6GB\n",
       "Dimensions:       (cells: 3894803, s_rho: 40, time_counter: 5)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 31MB dask.array<chunksize=(121713,), meta=np.ndarray>\n",
       "    latitude      (cells) float64 31MB dask.array<chunksize=(121713,), meta=np.ndarray>\n",
       "    longitude     (cells) float64 31MB dask.array<chunksize=(121713,), meta=np.ndarray>\n",
       "    resolution    float64 8B ...\n",
       "  * s_rho         (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n",
       "  * time_counter  (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n",
       "    time_instant  (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 31MB dask.array<chunksize=(3894803,), meta=np.ndarray>\n",
       "    temp          (time_counter, s_rho, cells) float64 6GB dask.array<chunksize=(1, 40, 3894803), meta=np.ndarray>\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=14, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      14\n",
       "    lon:        0\n",
       "    nside:      16384\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 6GB\n", "Dimensions: (cells: 3894803, s_rho: 40, time_counter: 5)\n", "Coordinates:\n", " * cell_ids (cells) uint64 31MB dask.array\n", " latitude (cells) float64 31MB dask.array\n", " longitude (cells) float64 31MB dask.array\n", " resolution float64 8B ...\n", " * s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n", " * time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n", " time_instant (time_counter) datetime64[ns] 40B dask.array\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 31MB dask.array\n", " temp (time_counter, s_rho, cells) float64 6GB dask.array\n", "Indexes:\n", " cell_ids HealpixIndex(level=14, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 14\n", " lon: 0\n", " nside: 16384\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds1 = xr.open_zarr(url_1).pipe(xdggs.decode)\n", "ds1" ] }, { "cell_type": "code", "execution_count": 5, "id": "9f43a9df-defc-413b-b28b-6af67c816326", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 2GB\n",
       "Dimensions:       (cells: 971899, s_rho: 40, time_counter: 5)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 8MB dask.array<chunksize=(60744,), meta=np.ndarray>\n",
       "    latitude      (cells) float64 8MB dask.array<chunksize=(60744,), meta=np.ndarray>\n",
       "    longitude     (cells) float64 8MB dask.array<chunksize=(60744,), meta=np.ndarray>\n",
       "    resolution    float64 8B ...\n",
       "  * s_rho         (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n",
       "  * time_counter  (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n",
       "    time_instant  (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 8MB dask.array<chunksize=(971899,), meta=np.ndarray>\n",
       "    temp          (time_counter, s_rho, cells) float64 2GB dask.array<chunksize=(1, 40, 971899), meta=np.ndarray>\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=13, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      13\n",
       "    lon:        0\n",
       "    nside:      8192\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 2GB\n", "Dimensions: (cells: 971899, s_rho: 40, time_counter: 5)\n", "Coordinates:\n", " * cell_ids (cells) uint64 8MB dask.array\n", " latitude (cells) float64 8MB dask.array\n", " longitude (cells) float64 8MB dask.array\n", " resolution float64 8B ...\n", " * s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n", " * time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n", " time_instant (time_counter) datetime64[ns] 40B dask.array\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 8MB dask.array\n", " temp (time_counter, s_rho, cells) float64 2GB dask.array\n", "Indexes:\n", " cell_ids HealpixIndex(level=13, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 13\n", " lon: 0\n", " nside: 8192\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds2 = xr.open_zarr(url_2).pipe(xdggs.decode)\n", "ds2" ] }, { "cell_type": "code", "execution_count": 6, "id": "9e912af6-9fa6-4b03-aad2-26d07338bb7a", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 395MB\n",
       "Dimensions:       (cells: 242076, s_rho: 40, time_counter: 5)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 2MB dask.array<chunksize=(30260,), meta=np.ndarray>\n",
       "    latitude      (cells) float64 2MB dask.array<chunksize=(30260,), meta=np.ndarray>\n",
       "    longitude     (cells) float64 2MB dask.array<chunksize=(30260,), meta=np.ndarray>\n",
       "    resolution    float64 8B ...\n",
       "  * s_rho         (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n",
       "  * time_counter  (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n",
       "    time_instant  (time_counter) datetime64[ns] 40B dask.array<chunksize=(1,), meta=np.ndarray>\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 2MB dask.array<chunksize=(242076,), meta=np.ndarray>\n",
       "    temp          (time_counter, s_rho, cells) float64 387MB dask.array<chunksize=(1, 40, 242076), meta=np.ndarray>\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=12, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      12\n",
       "    lon:        0\n",
       "    nside:      4096\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 395MB\n", "Dimensions: (cells: 242076, s_rho: 40, time_counter: 5)\n", "Coordinates:\n", " * cell_ids (cells) uint64 2MB dask.array\n", " latitude (cells) float64 2MB dask.array\n", " longitude (cells) float64 2MB dask.array\n", " resolution float64 8B ...\n", " * s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n", " * time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n", " time_instant (time_counter) datetime64[ns] 40B dask.array\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 2MB dask.array\n", " temp (time_counter, s_rho, cells) float64 387MB dask.array\n", "Indexes:\n", " cell_ids HealpixIndex(level=12, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 12\n", " lon: 0\n", " nside: 4096\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds3 = xr.open_zarr(url_3).pipe(xdggs.decode)\n", "ds3" ] }, { "cell_type": "markdown", "id": "38f8aaf2-d065-4f8b-95be-11e7a3d26166", "metadata": {}, "source": [ "## Create the DataTree" ] }, { "cell_type": "code", "execution_count": 7, "id": "15510c72-60c5-4cdc-abb4-fd635d91ae78", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DatasetView> Size: 0B\n",
       "Dimensions:  ()\n",
       "Data variables:\n",
       "    *empty*
" ], "text/plain": [ "\n", "Group: /\n", "├── Group: /14\n", "│ Dimensions: (cells: 3894803, s_rho: 40, time_counter: 5)\n", "│ Coordinates:\n", "│ * cell_ids (cells) uint64 31MB dask.array\n", "│ latitude (cells) float64 31MB dask.array\n", "│ longitude (cells) float64 31MB dask.array\n", "│ resolution float64 8B ...\n", "│ * s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n", "│ * time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n", "│ time_instant (time_counter) datetime64[ns] 40B dask.array\n", "│ Dimensions without coordinates: cells\n", "│ Data variables:\n", "│ ocean_mask (cells) float64 31MB dask.array\n", "│ temp (time_counter, s_rho, cells) float64 6GB dask.array\n", "│ Indexes:\n", "│ cell_ids HealpixIndex(level=14, indexing_scheme=nested)\n", "│ Attributes:\n", "│ grid_type: healpix\n", "│ lat: 0\n", "│ level: 14\n", "│ lon: 0\n", "│ nside: 16384\n", "│ rot_lat: 0\n", "│ rot_lon: 0\n", "├── Group: /13\n", "│ Dimensions: (cells: 971899, s_rho: 40, time_counter: 5)\n", "│ Coordinates:\n", "│ * cell_ids (cells) uint64 8MB dask.array\n", "│ latitude (cells) float64 8MB dask.array\n", "│ longitude (cells) float64 8MB dask.array\n", "│ resolution float64 8B ...\n", "│ * s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n", "│ * time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n", "│ time_instant (time_counter) datetime64[ns] 40B dask.array\n", "│ Dimensions without coordinates: cells\n", "│ Data variables:\n", "│ ocean_mask (cells) float64 8MB dask.array\n", "│ temp (time_counter, s_rho, cells) float64 2GB dask.array\n", "│ Indexes:\n", "│ cell_ids HealpixIndex(level=13, indexing_scheme=nested)\n", "│ Attributes:\n", "│ grid_type: healpix\n", "│ lat: 0\n", "│ level: 13\n", "│ lon: 0\n", "│ nside: 8192\n", "│ rot_lat: 0\n", "│ rot_lon: 0\n", "└── Group: /12\n", " Dimensions: (cells: 242076, s_rho: 40, time_counter: 5)\n", " Coordinates:\n", " * cell_ids (cells) uint64 2MB dask.array\n", " latitude (cells) float64 2MB dask.array\n", " longitude (cells) float64 2MB dask.array\n", " resolution float64 8B ...\n", " * s_rho (s_rho) float32 160B -0.9875 -0.9625 ... -0.0375 -0.0125\n", " * time_counter (time_counter) datetime64[ns] 40B 2004-01-01T00:58:30 ... 2...\n", " time_instant (time_counter) datetime64[ns] 40B dask.array\n", " Dimensions without coordinates: cells\n", " Data variables:\n", " ocean_mask (cells) float64 2MB dask.array\n", " temp (time_counter, s_rho, cells) float64 387MB dask.array\n", " Indexes:\n", " cell_ids HealpixIndex(level=12, indexing_scheme=nested)\n", " Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 12\n", " lon: 0\n", " nside: 4096\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dt = xr.DataTree.from_dict({\"/\" + str(ds1.attrs[\"level\"]): ds1, \"/\" + str(ds2.attrs[\"level\"]): ds2, \"/\" + str(ds3.attrs[\"level\"]): ds3}) # create root node\n", "dt" ] }, { "cell_type": "markdown", "id": "15605580-b6cc-405d-a54a-8a8cbc3d55c7", "metadata": {}, "source": [ "### Define functions" ] }, { "cell_type": "code", "execution_count": 8, "id": "4bf131f9-65bf-4293-80c0-035d88be7b59", "metadata": {}, "outputs": [], "source": [ "def create_arrow_table(polygons, arr, coords=None):\n", " from arro3.core import Array, ChunkedArray, Schema, Table\n", "\n", " if coords is None:\n", " coords = [\"latitude\", \"longitude\"]\n", "\n", " array = Array.from_arrow(polygons)\n", " name = arr.name or \"data\"\n", " arrow_arrays = {\n", " \"geometry\": array,\n", " \"cell_ids\": ChunkedArray([Array.from_numpy(arr.coords[\"cell_ids\"])]),\n", " name: ChunkedArray([Array.from_numpy(arr.data)]),\n", " } | {\n", " coord: ChunkedArray([Array.from_numpy(arr.coords[coord].data)])\n", " for coord in coords\n", " if coord in arr.coords\n", " }\n", "\n", " fields = [array.field.with_name(name) for name, array in arrow_arrays.items()]\n", " schema = Schema(fields)\n", "\n", " return Table.from_arrays(list(arrow_arrays.values()), schema=schema)\n", "\n", "\n", "def normalize(var, center=None):\n", " from matplotlib.colors import CenteredNorm, Normalize\n", "\n", " if center is None:\n", " vmin = var.min(skipna=True)\n", " vmax = var.max(skipna=True)\n", " normalizer = Normalize(vmin=vmin, vmax=vmax)\n", " else:\n", " halfrange = np.abs(var - center).max(skipna=True)\n", " normalizer = CenteredNorm(vcenter=center, halfrange=halfrange)\n", "\n", " return normalizer(var.data)\n", "\n", "\n", "def explore_layer(\n", " arr,\n", " cell_dim=\"cells\",\n", " cmap=\"viridis\",\n", " center=None,\n", " alpha=None,\n", "):\n", " from lonboard import SolidPolygonLayer\n", " from lonboard.colormap import apply_continuous_cmap\n", " from matplotlib import colormaps\n", "\n", " if len(arr.dims) != 1 or cell_dim not in arr.dims:\n", " raise ValueError(\n", " f\"exploration only works with a single dimension ('{cell_dim}')\"\n", " )\n", "\n", " cell_ids = arr.dggs.coord.data\n", " grid_info = arr.dggs.grid_info\n", "\n", " polygons = grid_info.cell_boundaries(cell_ids, backend=\"geoarrow\")\n", "\n", " normalized_data = normalize(arr.variable, center=center)\n", "\n", " colormap = colormaps[cmap]\n", " colors = apply_continuous_cmap(normalized_data, colormap, alpha=alpha)\n", "\n", " table = create_arrow_table(polygons, arr)\n", " layer = SolidPolygonLayer(table=table, filled=True, get_fill_color=colors)\n", "\n", " return layer" ] }, { "cell_type": "code", "execution_count": 9, "id": "b2652f60-9ae2-40ef-9e1c-b6212521450f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 6MB\n",
       "Dimensions:       (cells: 156410)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 1MB 11451631 11451635 ... 57954657 57954658\n",
       "    latitude      (cells) float64 1MB 49.25 49.25 49.26 ... 50.83 50.84 50.84\n",
       "    longitude     (cells) float64 1MB 0.4251 0.4767 0.4768 ... -7.884 -7.91\n",
       "    resolution    float64 8B 0.0002498\n",
       "    s_rho         float32 4B -0.9875\n",
       "    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 1MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0\n",
       "    temp          (cells) float64 1MB 13.35 12.86 12.63 ... 8.407 7.52 7.486\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=12, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      12\n",
       "    lon:        0\n",
       "    nside:      4096\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 6MB\n", "Dimensions: (cells: 156410)\n", "Coordinates:\n", " * cell_ids (cells) uint64 1MB 11451631 11451635 ... 57954657 57954658\n", " latitude (cells) float64 1MB 49.25 49.25 49.26 ... 50.83 50.84 50.84\n", " longitude (cells) float64 1MB 0.4251 0.4767 0.4768 ... -7.884 -7.91\n", " resolution float64 8B 0.0002498\n", " s_rho float32 4B -0.9875\n", " time_counter datetime64[ns] 8B 2004-01-01T00:58:30\n", " time_instant datetime64[ns] 8B 2004-01-01T00:58:30\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 1MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0\n", " temp (cells) float64 1MB 13.35 12.86 12.63 ... 8.407 7.52 7.486\n", "Indexes:\n", " cell_ids HealpixIndex(level=12, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 12\n", " lon: 0\n", " nside: 4096\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import lonboard\n", "ds_12 = dt[\"12\"].ds\n", "ds_12 = ds_12.isel(time_counter=0, s_rho=0).compute().dropna(dim='cells').pipe(xdggs.decode)\n", "ds_12" ] }, { "cell_type": "code", "execution_count": null, "id": "4a2e6e53-6454-4955-b86a-fc1ff177b4bd", "metadata": {}, "outputs": [], "source": [ "ds_12.temp.dggs.explore(alpha=1)" ] }, { "cell_type": "code", "execution_count": 15, "id": "15cc483c-6eab-4fbf-aff5-4ab1c52e17b3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 100MB\n",
       "Dimensions:       (cells: 2508887)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 20MB 183222103 183222107 ... 927275362\n",
       "    latitude      (cells) float64 20MB 49.27 49.27 49.27 ... 50.86 50.86 50.86\n",
       "    longitude     (cells) float64 20MB 0.09343 0.08055 0.08699 ... -7.971 -7.978\n",
       "    resolution    float64 8B 6.246e-05\n",
       "    s_rho         float32 4B -0.9875\n",
       "    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 20MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0\n",
       "    temp          (cells) float64 20MB 10.11 10.03 10.07 ... 6.252 5.662 6.062\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=14, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      14\n",
       "    lon:        0\n",
       "    nside:      16384\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 100MB\n", "Dimensions: (cells: 2508887)\n", "Coordinates:\n", " * cell_ids (cells) uint64 20MB 183222103 183222107 ... 927275362\n", " latitude (cells) float64 20MB 49.27 49.27 49.27 ... 50.86 50.86 50.86\n", " longitude (cells) float64 20MB 0.09343 0.08055 0.08699 ... -7.971 -7.978\n", " resolution float64 8B 6.246e-05\n", " s_rho float32 4B -0.9875\n", " time_counter datetime64[ns] 8B 2004-01-01T00:58:30\n", " time_instant datetime64[ns] 8B 2004-01-01T00:58:30\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 20MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0\n", " temp (cells) float64 20MB 10.11 10.03 10.07 ... 6.252 5.662 6.062\n", "Indexes:\n", " cell_ids HealpixIndex(level=14, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 14\n", " lon: 0\n", " nside: 16384\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import lonboard\n", "ds_14 = dt[\"14\"].ds\n", "ds_14 = ds_14.isel(time_counter=0, s_rho=0).compute().dropna(dim='cells').pipe(xdggs.decode)\n", "ds_14" ] }, { "cell_type": "code", "execution_count": null, "id": "f9313fdd-4e1f-4e55-bba7-655216d7c294", "metadata": {}, "outputs": [], "source": [ "ds_14.temp.dggs.explore(alpha=0.8)" ] }, { "cell_type": "code", "execution_count": 28, "id": "27a4bc8c-bdc9-458d-bc00-55f244bb0bde", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 6MB\n",
       "Dimensions:       (cells: 156410)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 1MB 11451631 11451635 ... 57954657 57954658\n",
       "    latitude      (cells) float64 1MB 49.25 49.25 49.26 ... 50.83 50.84 50.84\n",
       "    longitude     (cells) float64 1MB 0.4251 0.4767 0.4768 ... -7.884 -7.91\n",
       "    resolution    float64 8B 0.0002498\n",
       "    s_rho         float32 4B -0.9875\n",
       "    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 1MB nan nan nan nan nan ... nan nan nan nan\n",
       "    temp          (cells) float64 1MB nan nan nan nan nan ... nan nan nan nan\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=12, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      12\n",
       "    lon:        0\n",
       "    nside:      4096\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 6MB\n", "Dimensions: (cells: 156410)\n", "Coordinates:\n", " * cell_ids (cells) uint64 1MB 11451631 11451635 ... 57954657 57954658\n", " latitude (cells) float64 1MB 49.25 49.25 49.26 ... 50.83 50.84 50.84\n", " longitude (cells) float64 1MB 0.4251 0.4767 0.4768 ... -7.884 -7.91\n", " resolution float64 8B 0.0002498\n", " s_rho float32 4B -0.9875\n", " time_counter datetime64[ns] 8B 2004-01-01T00:58:30\n", " time_instant datetime64[ns] 8B 2004-01-01T00:58:30\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 1MB nan nan nan nan nan ... nan nan nan nan\n", " temp (cells) float64 1MB nan nan nan nan nan ... nan nan nan nan\n", "Indexes:\n", " cell_ids HealpixIndex(level=12, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 12\n", " lon: 0\n", " nside: 4096\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# (ds_12.longitude > -7.96) & (ds_12.longitude <-4.9) &\n", "ds_12_small = ds_12.where( (ds_12.latitude <46.5))\n", "ds_12_small" ] }, { "cell_type": "code", "execution_count": null, "id": "e2675604-bd5a-48a3-9beb-91bb012ebbce", "metadata": {}, "outputs": [], "source": [ "ds_12_small.temp.dggs.explore(alpha=0.8)" ] }, { "cell_type": "code", "execution_count": 31, "id": "131bf85e-c350-44e5-b21f-4492f2f6f793", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 100MB\n",
       "Dimensions:       (cells: 2508887)\n",
       "Coordinates:\n",
       "  * cell_ids      (cells) uint64 20MB 183222103 183222107 ... 927275362\n",
       "    latitude      (cells) float64 20MB 49.27 49.27 49.27 ... 50.86 50.86 50.86\n",
       "    longitude     (cells) float64 20MB 0.09343 0.08055 0.08699 ... -7.971 -7.978\n",
       "    resolution    float64 8B 6.246e-05\n",
       "    s_rho         float32 4B -0.9875\n",
       "    time_counter  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "    time_instant  datetime64[ns] 8B 2004-01-01T00:58:30\n",
       "Dimensions without coordinates: cells\n",
       "Data variables:\n",
       "    ocean_mask    (cells) float64 20MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0\n",
       "    temp          (cells) float64 20MB 10.11 10.03 10.07 ... 6.252 5.662 6.062\n",
       "Indexes:\n",
       "    cell_ids  HealpixIndex(level=14, indexing_scheme=nested)\n",
       "Attributes:\n",
       "    grid_type:  healpix\n",
       "    lat:        0\n",
       "    level:      14\n",
       "    lon:        0\n",
       "    nside:      16384\n",
       "    rot_lat:    0\n",
       "    rot_lon:    0
" ], "text/plain": [ " Size: 100MB\n", "Dimensions: (cells: 2508887)\n", "Coordinates:\n", " * cell_ids (cells) uint64 20MB 183222103 183222107 ... 927275362\n", " latitude (cells) float64 20MB 49.27 49.27 49.27 ... 50.86 50.86 50.86\n", " longitude (cells) float64 20MB 0.09343 0.08055 0.08699 ... -7.971 -7.978\n", " resolution float64 8B 6.246e-05\n", " s_rho float32 4B -0.9875\n", " time_counter datetime64[ns] 8B 2004-01-01T00:58:30\n", " time_instant datetime64[ns] 8B 2004-01-01T00:58:30\n", "Dimensions without coordinates: cells\n", "Data variables:\n", " ocean_mask (cells) float64 20MB 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0\n", " temp (cells) float64 20MB 10.11 10.03 10.07 ... 6.252 5.662 6.062\n", "Indexes:\n", " cell_ids HealpixIndex(level=14, indexing_scheme=nested)\n", "Attributes:\n", " grid_type: healpix\n", " lat: 0\n", " level: 14\n", " lon: 0\n", " nside: 16384\n", " rot_lat: 0\n", " rot_lon: 0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_14_small = ds_14.where((ds_14.latitude >=46.5) )\n", "ds_14_small" ] }, { "cell_type": "code", "execution_count": null, "id": "8f6771e2-35dd-41a4-a970-c091e86bf62b", "metadata": {}, "outputs": [], "source": [ "ds_14_small.temp.dggs.explore(alpha=0.8)" ] }, { "cell_type": "markdown", "id": "6d9897cc-efaa-4d19-b4e4-04c17aa56e43", "metadata": {}, "source": [ "## Visualize with lonboard the two levels on the same map\n", "- To show how the use of multiscale could be beneficial for RiOMar data." ] }, { "cell_type": "code", "execution_count": null, "id": "2f816633-9594-4e46-a4e6-b524af0b82d4", "metadata": {}, "outputs": [], "source": [ "\n", "lonboard.Map(\n", " [\n", " explore_layer(\n", " ds_12_small.temp,\n", " alpha=1,\n", " ),\n", " explore_layer(ds_14_small.temp, alpha=1),\n", " ]\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "0305901f-9cb4-467b-8900-08f32c333794", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "685c7f77-6137-48ff-b5b9-885b8a894498", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9e652b79-3132-4800-965f-de159bf4da2e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d274ad04-f81d-40a6-aa02-c6cf861816c3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "533406af-eb6f-4a11-adcd-d6369c37fbef", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0484f727-bb22-4533-9df0-e25ab0dfbdbe", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d1531935-9fbb-4a04-985e-a97cfaf19e11", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "be9a6a97-8522-476c-8662-97faf36daf2f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6081e682-e7fc-46d5-895f-c660f49ce5b8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8d6326fb-2aae-4bba-884b-25605ce7eebb", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.5" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }