{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Copyright CNES\n", "\n", "## Read and plot a SWOT-HR Pixel Cloud netcdf products \n", "In this notebook, we show how to read the SWOT-HR pixel cloud products with xarray and how to represent a variable on a map with cartopy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Libraries\n", "Please note that apart from the libraries listed in the cell below, you need to install the h5netcdf library (conda install -c conda-forge h5netcdf). This will be used by th xarray.open_dataset function to read the netcdf files." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "import os\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Read a SWOT-HR Pixel Cloud netcdf product\n", "Note this is an extraction of the original file for demonstration purpose. It does not contain all variables and groups" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "dir_swot = \"../docs/data/swot\"\n", "file_swot_pxc = os.path.join(dir_swot, \"SWOT_L2_HR_PIXC\", \"SWOT_L2_HR_PIXC_015_033_163R_20240509T115817_20240509T115828_PIC0_01_extract.nc\")\n", "# read data with xarray, specifying a group in the netcdf structure\n", "xr_pxc = xr.open_dataset(file_swot_pxc, group=\"pixel_cloud\")\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:         (points: 10001)\n",
       "Coordinates:\n",
       "    latitude        (points) float64 4.597 4.597 4.597 ... 4.653 4.652 4.652\n",
       "    longitude       (points) float64 -53.06 -53.06 -53.06 ... -53.39 -53.39\n",
       "Dimensions without coordinates: points\n",
       "Data variables:\n",
       "    classification  (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "    coherent_power  (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "    cross_track     (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "    geoid           (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "    height          (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "    sig0            (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "    wse             (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n",
       "Attributes:\n",
       "    description:                 cloud of geolocated interferogram pixels\n",
       "    interferogram_size_azimuth:  3277\n",
       "    interferogram_size_range:    4694\n",
       "    looks_to_efflooks:           1.55135648150391\n",
       "    num_azimuth_looks:           7.0\n",
       "    azimuth_offset:              7
" ], "text/plain": [ "\n", "Dimensions: (points: 10001)\n", "Coordinates:\n", " latitude (points) float64 4.597 4.597 4.597 ... 4.653 4.652 4.652\n", " longitude (points) float64 -53.06 -53.06 -53.06 ... -53.39 -53.39\n", "Dimensions without coordinates: points\n", "Data variables:\n", " classification (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", " coherent_power (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", " cross_track (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", " geoid (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", " height (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", " sig0 (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", " wse (points) float32 nan nan nan nan nan ... nan nan nan nan nan\n", "Attributes:\n", " description: cloud of geolocated interferogram pixels\n", " interferogram_size_azimuth: 3277\n", " interferogram_size_range: 4694\n", " looks_to_efflooks: 1.55135648150391\n", " num_azimuth_looks: 7.0\n", " azimuth_offset: 7" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# remove undefined values based on variable of interest\n", "xr_pxc = xr_pxc.where(\n", " (xr_pxc['classification']>=3) &\n", " (xr_pxc['sig0']>=20) &\n", " (xr_pxc['cross_track']>=10000) &\n", " ~np.isnan(xr_pxc['height'])\n", ")\n", "xr_pxc['wse'] = xr_pxc['height'] - xr_pxc['geoid']\n", "xr_pxc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Plot data on maps with cartopy" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Pixel Cloud')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import cartopy.crs as ccrs\n", "import cartopy.feature as cfeature\n", "\n", "\n", "def customize_map(ax, cb, label, crs=ccrs.PlateCarree()):\n", " \"\"\"This function customizes a map with projection and returns the plt.axes instance\"\"\"\n", "\n", " ax.gridlines(\n", " crs=crs,\n", " draw_labels=True,\n", " color='.7',\n", " alpha=.6,\n", " linewidth=.4,\n", " linestyle='-',\n", " )\n", " \n", " # add a background_map (default, local image, WMTS...read the doc)\n", " # ax.stock_img()\n", "\n", " # add a labeled colorbar\n", " plt.colorbar(\n", " cb,\n", " ax=ax,\n", " orientation='horizontal',\n", " shrink=0.6,\n", " pad=.05,\n", " aspect=40,\n", " label=label)\n", "\n", " return ax\n", "\n", "\n", "# 0. Create Figure and Axes\n", "crs = ccrs.PlateCarree()\n", "fig, ax = plt.subplots(\n", " subplot_kw={'projection': crs},\n", " figsize=(12,8),\n", " frameon=True,\n", " )\n", "\n", "# 1. plot data on the map with scatter function\n", "cb0 = ax.scatter(\n", " x=xr_pxc.longitude,\n", " y=xr_pxc.latitude,\n", " c=xr_pxc.wse,\n", " s=1,\n", " transform=crs,\n", " cmap='viridis',\n", " )\n", "# Initiate a map with the function above for Pixel cloud\n", "customize_map(ax, cb0, \"Water Surface Height (m)\")\n", "# limit map boundaries based on actual data\n", "ax.set_extent(\n", " [\n", " xr_pxc.longitude.min(),\n", " xr_pxc.longitude.max(),\n", " xr_pxc.latitude.min(),\n", " xr_pxc.latitude.max(),\n", " ], \n", " crs=crs\n", " )\n", "ax.set_title(\"Pixel Cloud\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.6 ('geo-env')", "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.10.12" }, "vscode": { "interpreter": { "hash": "c53c0f632c0bd5c80f0fc28f8860901a2b42413fffd8e5b69bb54373659a6ea7" } } }, "nbformat": 4, "nbformat_minor": 2 }