Skip to content

Instantly share code, notes, and snippets.

@monocongo
Last active January 3, 2023 23:26
Show Gist options
  • Save monocongo/978348233b4bde80e9bcc52fe8e4150c to your computer and use it in GitHub Desktop.
Save monocongo/978348233b4bde80e9bcc52fe8e4150c to your computer and use it in GitHub Desktop.
Use xarray for parallel computation with stack-groupby-apply-unstack
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "fbd86c94",
"metadata": {},
"source": [
"# SPI for example precipitation NetCDF\n",
"Below we wrap the `climate_indices.indices.spi` function so it can be applied to the variables of a Dataset, i.e. it needs to have a DataArray input as the first argument as well as a DataArray return value."
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "2a8ac655",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# standard library\n",
"import os\n",
"from tempfile import TemporaryDirectory\n",
"from typing import Dict\n",
"\n",
"# third-party\n",
"from climate_indices.indices import spi, Distribution\n",
"from climate_indices.compute import Periodicity\n",
"import numpy as np\n",
"import pandas as pd\n",
"import requests\n",
"import xarray as xr"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "0cefb116",
"metadata": {},
"outputs": [],
"source": [
"# create a wrapper function that can be applied to an entire Dataset\n",
"# (takes a DataArray as first argument, returns a DataArray)\n",
"def spi_wrapper(\n",
" obj: xr.DataArray,\n",
" precip_var: str,\n",
" scale: int,\n",
" distribution: Distribution,\n",
" data_start_year: int,\n",
" calibration_year_initial: int,\n",
" calibration_year_final: int,\n",
" periodicity: Periodicity,\n",
" fitting_params: Dict = None,\n",
") -> xr.DataArray:\n",
" \n",
" # compute SPI for this timeseries\n",
" spi_data = spi(\n",
" values=obj[precip_var].to_numpy(), #TODO find why we need to use the variable name rather than already using the variables's DataArray (i.e. why is obj a Dataset?)\n",
" scale=scale,\n",
" distribution=distribution,\n",
" data_start_year=data_start_year,\n",
" calibration_year_initial=calibration_year_initial,\n",
" calibration_year_final=calibration_year_final,\n",
" periodicity=periodicity,\n",
" fitting_params=fitting_params,\n",
" )\n",
"\n",
" #TODO for some reason this is necessary for the nClimGrid low-resolution example NetCDFs\n",
" #TODO find out why\n",
" spi_data = spi_data.flatten()\n",
" \n",
" #TODO for some reason this is necessary for the NCO-modified nClimGrid normal-resolution example NetCDFs\n",
" #TODO find out why\n",
" # spi_data = spi_data.reshape(spi_data.size, 1)\n",
" \n",
" # create the return DataArray (copy of input object's geospatial dims/coords plus SPI data)\n",
" da_spi = xr.DataArray(\n",
" dims = obj[precip_var].dims,\n",
" coords = obj[precip_var].coords,\n",
" attrs = {\n",
" 'description': 'SPI computed by the climate_indices Python package',\n",
" 'references': 'https://github.com/monocongo/climate_indices',\n",
" 'valid_min': -3.09, # this should mirror climate_indices.indices._FITTED_INDEX_VALID_MIN\n",
" 'valid_max': 3.09, # this should mirror climate_indices.indices._FITTED_INDEX_VALID_MAX\n",
" },\n",
" data = spi_data,\n",
" )\n",
"\n",
" return da_spi"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "77e3e78c",
"metadata": {},
"outputs": [],
"source": [
"# convenience function for downloading from HTTP location to local file\n",
"def download(\n",
" source_uri: str,\n",
" destination_filepath: str,\n",
") -> None:\n",
"\n",
" #TODO add URI validation check\n",
" \n",
" # make HTTP request for remote file data\n",
" data = requests.get(source_uri)\n",
"\n",
" # save file data to local copy\n",
" with open(destination_filepath, 'wb') as destination_file:\n",
" destination_file.write(data.content)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "0ef3b238",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body[data-theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
"Dimensions: (lat: 38, lon: 87, time: 1466)\n",
"Coordinates:\n",
" * lat (lat) float32 24.56 25.23 25.9 26.56 ... 47.23 47.9 48.56 49.23\n",
" * lon (lon) float32 -124.7 -124.0 -123.4 -122.7 ... -68.69 -68.02 -67.35\n",
" * time (time) datetime64[ns] 1895-01-01 1895-02-01 ... 2017-02-01\n",
"Data variables:\n",
" prcp (lat, lon, time) float32 ...\n",
"Attributes: (12/17)\n",
" date_created: 2017-01-04 04:00:08.008484\n",
" date_modified: 2017-01-04 04:00:08.011881\n",
" Conventions: CF-1.6, ACDD-1.3\n",
" ncei_template_version: NCEI_NetCDF_Grid_Template_v2.0\n",
" title: nClimGrid\n",
" naming_authority: gov.noaa.ncei\n",
" ... ...\n",
" geospatial_lon_max: -67.020836\n",
" geospatial_lat_units: degrees_north\n",
" geospatial_lon_units: degrees_east\n",
" history: Sat Apr 28 02:50:28 2018: C:\\home\\miniconda\\Li...\n",
" NCO: 4.7.1\n",
" nco_openmp_thread_number: 1</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-3de9860c-f7c4-4922-a77e-c4dd547d88a1' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-3de9860c-f7c4-4922-a77e-c4dd547d88a1' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>lat</span>: 38</li><li><span class='xr-has-index'>lon</span>: 87</li><li><span class='xr-has-index'>time</span>: 1466</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-86acf9d6-2a73-43a1-b511-53146a089528' class='xr-section-summary-in' type='checkbox' checked><label for='section-86acf9d6-2a73-43a1-b511-53146a089528' class='xr-section-summary' >Coordinates: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>24.56 25.23 25.9 ... 48.56 49.23</div><input id='attrs-2bc6fe0d-7c52-4359-9c7b-48f3a4752c15' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-2bc6fe0d-7c52-4359-9c7b-48f3a4752c15' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2461660f-409c-4fdc-80cf-6055ff369c02' class='xr-var-data-in' type='checkbox'><label for='data-2461660f-409c-4fdc-80cf-6055ff369c02' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>long_name :</span></dt><dd>Latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>axis :</span></dt><dd>Y</dd><dt><span>valid_min :</span></dt><dd>24.5625</dd><dt><span>valid_max :</span></dt><dd>49.354168</dd></dl></div><div class='xr-var-data'><pre>array([24.5625 , 25.229166, 25.895834, 26.5625 , 27.229166, 27.895834,\n",
" 28.5625 , 29.229166, 29.895834, 30.5625 , 31.229166, 31.895834,\n",
" 32.5625 , 33.229168, 33.895832, 34.5625 , 35.229168, 35.895832,\n",
" 36.5625 , 37.229168, 37.895832, 38.5625 , 39.229168, 39.895832,\n",
" 40.5625 , 41.229168, 41.895832, 42.5625 , 43.229168, 43.895832,\n",
" 44.5625 , 45.229168, 45.895832, 46.5625 , 47.229168, 47.895832,\n",
" 48.5625 , 49.229168], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-124.7 -124.0 ... -68.02 -67.35</div><input id='attrs-3e0dff1b-0382-441a-9d13-7e3c80214d0d' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3e0dff1b-0382-441a-9d13-7e3c80214d0d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-20cc383d-cb69-4c70-8043-71297cac8416' class='xr-var-data-in' type='checkbox'><label for='data-20cc383d-cb69-4c70-8043-71297cac8416' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>long_name :</span></dt><dd>Longitude</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>axis :</span></dt><dd>X</dd><dt><span>valid_min :</span></dt><dd>-124.6875</dd><dt><span>valid_max :</span></dt><dd>-67.020836</dd></dl></div><div class='xr-var-data'><pre>array([-124.6875 , -124.020836, -123.354164, -122.6875 , -122.020836,\n",
" -121.354164, -120.6875 , -120.020836, -119.354164, -118.6875 ,\n",
" -118.020836, -117.354164, -116.6875 , -116.020836, -115.354164,\n",
" -114.6875 , -114.020836, -113.354164, -112.6875 , -112.020836,\n",
" -111.354164, -110.6875 , -110.020836, -109.354164, -108.6875 ,\n",
" -108.020836, -107.354164, -106.6875 , -106.020836, -105.354164,\n",
" -104.6875 , -104.020836, -103.354164, -102.6875 , -102.020836,\n",
" -101.354164, -100.6875 , -100.020836, -99.354164, -98.6875 ,\n",
" -98.020836, -97.354164, -96.6875 , -96.020836, -95.354164,\n",
" -94.6875 , -94.020836, -93.354164, -92.6875 , -92.020836,\n",
" -91.354164, -90.6875 , -90.020836, -89.354164, -88.6875 ,\n",
" -88.020836, -87.354164, -86.6875 , -86.020836, -85.354164,\n",
" -84.6875 , -84.020836, -83.354164, -82.6875 , -82.020836,\n",
" -81.354164, -80.6875 , -80.020836, -79.354164, -78.6875 ,\n",
" -78.020836, -77.354164, -76.6875 , -76.020836, -75.354164,\n",
" -74.6875 , -74.020836, -73.354164, -72.6875 , -72.020836,\n",
" -71.354164, -70.6875 , -70.020836, -69.354164, -68.6875 ,\n",
" -68.020836, -67.354164], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1895-01-01 ... 2017-02-01</div><input id='attrs-c8c25381-cb98-40a2-884f-ec14f92ac617' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-c8c25381-cb98-40a2-884f-ec14f92ac617' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-008a0435-199e-4b06-a904-605df237f52c' class='xr-var-data-in' type='checkbox'><label for='data-008a0435-199e-4b06-a904-605df237f52c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Time, in monthly increments</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>axis :</span></dt><dd>T</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;1895-01-01T00:00:00.000000000&#x27;, &#x27;1895-02-01T00:00:00.000000000&#x27;,\n",
" &#x27;1895-03-01T00:00:00.000000000&#x27;, ..., &#x27;2016-12-01T00:00:00.000000000&#x27;,\n",
" &#x27;2017-01-01T00:00:00.000000000&#x27;, &#x27;2017-02-01T00:00:00.000000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8364d35c-13eb-408a-9cac-0d2351ec8ddd' class='xr-section-summary-in' type='checkbox' checked><label for='section-8364d35c-13eb-408a-9cac-0d2351ec8ddd' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>prcp</span></div><div class='xr-var-dims'>(lat, lon, time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-49e157eb-fe0c-487e-8719-0a1f5d3a8c53' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-49e157eb-fe0c-487e-8719-0a1f5d3a8c53' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-19bd593a-3cc2-482e-95e9-e157e46acac5' class='xr-var-data-in' type='checkbox'><label for='data-19bd593a-3cc2-482e-95e9-e157e46acac5' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>references :</span></dt><dd>GHCN-Monthly Version 3 (Vose et al. 2011), NCEI/NOAA, https://www.ncdc.noaa.gov/ghcnm/v3.php</dd><dt><span>valid_min :</span></dt><dd>0.0</dd><dt><span>units :</span></dt><dd>millimeter</dd><dt><span>valid_max :</span></dt><dd>2000.0</dd><dt><span>standard_name :</span></dt><dd>precipitation_amount</dd><dt><span>long_name :</span></dt><dd>Precipitation, monthly total</dd></dl></div><div class='xr-var-data'><pre>[4846596 values with dtype=float32]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ad0d5472-3f2b-4aee-ada9-8e43558d2931' class='xr-section-summary-in' type='checkbox' ><label for='section-ad0d5472-3f2b-4aee-ada9-8e43558d2931' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-397183ad-f231-4903-b6f9-5ca0d1258482' class='xr-index-data-in' type='checkbox'/><label for='index-397183ad-f231-4903-b6f9-5ca0d1258482' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([ 24.5625, 25.22916603088379, 25.89583396911621,\n",
" 26.5625, 27.22916603088379, 27.89583396911621,\n",
" 28.5625, 29.22916603088379, 29.89583396911621,\n",
" 30.5625, 31.22916603088379, 31.89583396911621,\n",
" 32.5625, 33.22916793823242, 33.89583206176758,\n",
" 34.5625, 35.22916793823242, 35.89583206176758,\n",
" 36.5625, 37.22916793823242, 37.89583206176758,\n",
" 38.5625, 39.22916793823242, 39.89583206176758,\n",
" 40.5625, 41.22916793823242, 41.89583206176758,\n",
" 42.5625, 43.22916793823242, 43.89583206176758,\n",
" 44.5625, 45.22916793823242, 45.89583206176758,\n",
" 46.5625, 47.22916793823242, 47.89583206176758,\n",
" 48.5625, 49.22916793823242],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;lat&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-b7042cc4-9e97-4ed9-99ea-dff0214aa9f8' class='xr-index-data-in' type='checkbox'/><label for='index-b7042cc4-9e97-4ed9-99ea-dff0214aa9f8' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([ -124.6875, -124.02083587646484, -123.35416412353516,\n",
" -122.6875, -122.02083587646484, -121.35416412353516,\n",
" -120.6875, -120.02083587646484, -119.35416412353516,\n",
" -118.6875, -118.02083587646484, -117.35416412353516,\n",
" -116.6875, -116.02083587646484, -115.35416412353516,\n",
" -114.6875, -114.02083587646484, -113.35416412353516,\n",
" -112.6875, -112.02083587646484, -111.35416412353516,\n",
" -110.6875, -110.02083587646484, -109.35416412353516,\n",
" -108.6875, -108.02083587646484, -107.35416412353516,\n",
" -106.6875, -106.02083587646484, -105.35416412353516,\n",
" -104.6875, -104.02083587646484, -103.35416412353516,\n",
" -102.6875, -102.02083587646484, -101.35416412353516,\n",
" -100.6875, -100.02083587646484, -99.35416412353516,\n",
" -98.6875, -98.02083587646484, -97.35416412353516,\n",
" -96.6875, -96.02083587646484, -95.35416412353516,\n",
" -94.6875, -94.02083587646484, -93.35416412353516,\n",
" -92.6875, -92.02083587646484, -91.35416412353516,\n",
" -90.6875, -90.02083587646484, -89.35416412353516,\n",
" -88.6875, -88.02083587646484, -87.35416412353516,\n",
" -86.6875, -86.02083587646484, -85.35416412353516,\n",
" -84.6875, -84.02083587646484, -83.35416412353516,\n",
" -82.6875, -82.02083587646484, -81.35416412353516,\n",
" -80.6875, -80.02083587646484, -79.35416412353516,\n",
" -78.6875, -78.02083587646484, -77.35416412353516,\n",
" -76.6875, -76.02083587646484, -75.35416412353516,\n",
" -74.6875, -74.02083587646484, -73.35416412353516,\n",
" -72.6875, -72.02083587646484, -71.35416412353516,\n",
" -70.6875, -70.02083587646484, -69.35416412353516,\n",
" -68.6875, -68.02083587646484, -67.35416412353516],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;lon&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-9ced0603-a930-4c92-a780-9176f8ef99e8' class='xr-index-data-in' type='checkbox'/><label for='index-9ced0603-a930-4c92-a780-9176f8ef99e8' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;1895-01-01&#x27;, &#x27;1895-02-01&#x27;, &#x27;1895-03-01&#x27;, &#x27;1895-04-01&#x27;,\n",
" &#x27;1895-05-01&#x27;, &#x27;1895-06-01&#x27;, &#x27;1895-07-01&#x27;, &#x27;1895-08-01&#x27;,\n",
" &#x27;1895-09-01&#x27;, &#x27;1895-10-01&#x27;,\n",
" ...\n",
" &#x27;2016-05-01&#x27;, &#x27;2016-06-01&#x27;, &#x27;2016-07-01&#x27;, &#x27;2016-08-01&#x27;,\n",
" &#x27;2016-09-01&#x27;, &#x27;2016-10-01&#x27;, &#x27;2016-11-01&#x27;, &#x27;2016-12-01&#x27;,\n",
" &#x27;2017-01-01&#x27;, &#x27;2017-02-01&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;time&#x27;, length=1466, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-4bc87574-b6d4-4278-9f32-4988fb4f01d3' class='xr-section-summary-in' type='checkbox' ><label for='section-4bc87574-b6d4-4278-9f32-4988fb4f01d3' class='xr-section-summary' >Attributes: <span>(17)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>date_created :</span></dt><dd>2017-01-04 04:00:08.008484</dd><dt><span>date_modified :</span></dt><dd>2017-01-04 04:00:08.011881</dd><dt><span>Conventions :</span></dt><dd>CF-1.6, ACDD-1.3</dd><dt><span>ncei_template_version :</span></dt><dd>NCEI_NetCDF_Grid_Template_v2.0</dd><dt><span>title :</span></dt><dd>nClimGrid</dd><dt><span>naming_authority :</span></dt><dd>gov.noaa.ncei</dd><dt><span>standard_name_vocabulary :</span></dt><dd>Standard Name Table v35</dd><dt><span>institution :</span></dt><dd>National Centers for Environmental Information (NCEI), NOAA, Department of Commerce</dd><dt><span>geospatial_lat_min :</span></dt><dd>24.5625</dd><dt><span>geospatial_lat_max :</span></dt><dd>49.354168</dd><dt><span>geospatial_lon_min :</span></dt><dd>-124.6875</dd><dt><span>geospatial_lon_max :</span></dt><dd>-67.020836</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees_north</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees_east</dd><dt><span>history :</span></dt><dd>Sat Apr 28 02:50:28 2018: C:\\home\\miniconda\\Library\\bin\\ncpdq.exe -a lat,lon,time nclimgrid_lowres_prcp.nc nclimgrid_prcp.nc</dd><dt><span>NCO :</span></dt><dd>4.7.1</dd><dt><span>nco_openmp_thread_number :</span></dt><dd>1</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (lat: 38, lon: 87, time: 1466)\n",
"Coordinates:\n",
" * lat (lat) float32 24.56 25.23 25.9 26.56 ... 47.23 47.9 48.56 49.23\n",
" * lon (lon) float32 -124.7 -124.0 -123.4 -122.7 ... -68.69 -68.02 -67.35\n",
" * time (time) datetime64[ns] 1895-01-01 1895-02-01 ... 2017-02-01\n",
"Data variables:\n",
" prcp (lat, lon, time) float32 ...\n",
"Attributes: (12/17)\n",
" date_created: 2017-01-04 04:00:08.008484\n",
" date_modified: 2017-01-04 04:00:08.011881\n",
" Conventions: CF-1.6, ACDD-1.3\n",
" ncei_template_version: NCEI_NetCDF_Grid_Template_v2.0\n",
" title: nClimGrid\n",
" naming_authority: gov.noaa.ncei\n",
" ... ...\n",
" geospatial_lon_max: -67.020836\n",
" geospatial_lat_units: degrees_north\n",
" geospatial_lon_units: degrees_east\n",
" history: Sat Apr 28 02:50:28 2018: C:\\home\\miniconda\\Li...\n",
" NCO: 4.7.1\n",
" nco_openmp_thread_number: 1"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# download example precipitation data from GitHub (or from NOAA for full size), read into xarray.Dataset\n",
"precip_uri = 'https://github.com/monocongo/example_climate_indices/raw/master/example/input/nclimgrid_lowres_prcp.nc'\n",
"#precip_uri = 'https://www.ncei.noaa.gov/data/nclimgrid-monthly/access/nclimgrid_prcp.nc'\n",
"with TemporaryDirectory() as tmp_dir:\n",
" file_name = os.path.basename(precip_uri)\n",
" temp_file_path = os.sep.join([tmp_dir, file_name])\n",
" download(precip_uri, temp_file_path)\n",
" ds = xr.open_dataset(temp_file_path)\n",
"ds"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "916eaa95",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x7f743c7fac50>"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHFCAYAAADxOP3DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACJjElEQVR4nO3deXgURd4H8G/nmMkdcpALQgC5xBBQUATUcB8qIHiwogICXiiKgKigEFQOUS5RWQ8E1HVxFdHdlVsJh4CGAMuhImqQgAmBEHKfM/X+wZuR6uqQGTIwSeb7eZ55Hrqmurq6emaoVFf/ShNCCBARERG5KQ9XV4CIiIjIldgZIiIiIrfGzhARERG5NXaGiIiIyK2xM0RERERujZ0hIiIicmvsDBEREZFbY2eIiIiI3Bo7Q0REROTW2BmiOm/nzp1ISkrCuXPnlPe6d++O7t27X/E6XSmLFi3C0KFD0axZM2iadtFz3bBhA7p16wZfX18EBwdj4MCBOHz4sGHewsJCTJ8+Ha1atYLZbEZYWBh69OiBo0ePSvleeOEF3H777WjUqBE0TcOoUaMcPoesrCyMGjUK4eHh8PPzQ5cuXfDNN98o+crKyjB9+nQ0a9YMJpMJcXFxeP7551FcXOzQ8ZYsWYI2bdrAbDajWbNmmDlzJsrLy6U8J06cwIQJE5CYmIgGDRpA0zSsWLHC4XMjorqBnSGq83bu3ImZM2cadobefvttvP3221e+UlfI3//+d/zxxx/o2bMnGjZsWGW+r776CgMGDEBERARWr16Nv//97zh69Chuvvlm/Pbbb1LegoICdO/eHcuWLcP48eOxceNGLF++HJ07d0ZRUZGUd+HChcjOzsagQYNgMpkcrn9paSl69eqFb775BosXL8ZXX32FyMhI9O/fH1u3bpXy3nvvvXjttdfw8MMPY+3atRg7diwWLFiAYcOG2X28WbNm4amnnsLQoUOxYcMGjBs3DrNnz8bjjz8u5fv111/xj3/8AyaTCbfeeqvD50VEdYwgquNee+01AUCkpaW5uipXnMVisf37mmuuEYmJiYb5WrduLRISEoTVarWlHTt2TJhMJjF8+HAp71NPPSX8/f3Fb7/95tDx/f39xciRIx2q/1tvvSUAiJ07d9rSysvLRdu2bcUNN9xgS9u1a5cAIObPny/tP3v2bAFAbNy4sdpjnTlzRvj4+IiHH35YSp81a5bQNE0cPnzY8LxSUlIEALF8+XKHzo2I6g6ODFGdlpSUhGeeeQYAbLeKNE1DcnIyAPU22bFjx6BpGl577TW8+uqraNq0KXx9fdG9e3f88ssvKC8vx3PPPYeYmBgEBwdjyJAhyMrKUo776aefokuXLvD390dAQAD69euHffv2XYlTlnh4VP8Vzs7OxpEjRzBgwABommZLj4uLQ3x8PL788ktYLBYAQFFREd5//33cfffdaN68uVOOfzFr1qxB69at0aVLF1ual5cX7r//fvzwww84efIkAOC7774DAGWU5vbbbwcArF69utpjrV+/HiUlJXjwwQel9AcffBBCCHz55Ze2tJqeFxHVLfzGU502duxYjB8/HgDwxRdfYNeuXdi1axeuu+66i+731ltv4bvvvsNbb72F999/Hz///DMGDhyIMWPG4PTp0/jggw8wb948bN68GWPHjpX2nT17Nu699160bdsW//rXv/DRRx8hPz8fN998M3788cdq61xRUWHXSwhx6Q1zgbKyMgCA2WxW3jObzSgqKrLdKktNTUVhYSFatmyJxx57DCEhITCZTOjUqRO+/vprp9TnQocOHUJCQoKSXplWOaepqnOo3D5w4IBdxwKAdu3aSenR0dEIDw+3vU9E7sfL1RUgqonGjRujSZMmAIBrr70WTZs2tWu/Bg0a4Msvv7SNAJw5cwYTJkxAmzZt8NVXX9ny/fzzz1i0aBHy8vIQFBSE9PR0zJgxA0888QTeeOMNW74+ffqgZcuWmDlzJj799NMqj3vs2DE0a9bMrjpu2bLFKZO/IyMjERoaahtdqXTu3DlbByA7OxsAbCMxr776Ktq1a4cPP/wQHh4emD9/PgYOHIh169ahX79+Na5TpezsbISGhirplWmV9Wrbti2A8yNEF7bfjh07pHzVHctsNsPf39/wePaUQUT1EztD5JZuvfVW6VbI1VdfDQC47bbbpHyV6cePH0d8fDw2bNiAiooKjBgxAhUVFbZ8Pj4+SExMxJYtWy563JiYGKSkpNhVx9atW9uVrzoeHh54/PHH8fLLL+Pll1/GI488gry8PEyYMME2IbqyLaxWKwDAZDJh3bp1CAwMBAD06NEDLVu2xMsvv+xwZ0gIYbsNV8nL66+fngtv3elVvjdgwAC0aNECzz77LCIjI3H99ddj9+7dmDp1Kjw9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prCwECNGjEBAQACio6Mxf/58JU9ZWRmmTJmCRo0awd/fH507d0ZycrKU57333kNsbCz8/PwwZMgQLFiwQOp0JSUloUOHDvjggw/QvHlzmM1mCCGQm5uLhx9+GBEREQgKCkLPnj3xv//9Tyr7P//5Dzp27AgfHx80b94cM2fOlK5fUlISmjRpArPZjJiYGDz55JN2nXt155WdnY17770XjRs3hp+fH9q1a4d//vOfUhmff/452rVrB19fX4SFhaF3794oLCxEUlISVq5cia+++sp2W0zfZkRUt9TuP3WJLuLkyZO49dZbMWrUKHz44Yf4+eef8dBDD8HHx0fqgKxcuRITJ07E999/j127dmHUqFHo1q0b+vTpA6vVijvuuANNmjTB999/j/z8fEyaNKnKY8bGxmL16tW48847ceTIEQQFBcHX19eu+lqtVgwdOhTh4eHYvXs38vLylPk7RUVF6NGjB26++WZs27YNXl5eeOWVV9C/f38cOHAAJpPJ7vZ55plnsGXLFqxZswZRUVGYOnUqUlNT0aFDB1ueBx98EMeOHcOqVasQExODNWvWoH///jh48CBatmyJ7777Do8++iheffVVDBo0CJs3b8aLL76oHOvXX3/Fv/71L6xevRqenp4AgNtuuw2hoaFYu3YtgoOD8c4776BXr1745ZdfEBoaig0bNuD+++/HG2+8gZtvvhm//fYbHn74YQDAjBkz8Pnnn2PhwoVYtWoVrrnmGmRmZiqdqapUd14lJSXo2LEjnn32WQQFBeHrr7/GAw88gObNm6Nz587IyMjAvffei3nz5mHIkCHIz8/H9u3bIYTA5MmT8dNPPyEvLw/Lly8HAISGhtp9XYioFnLtOrFEFzdy5EgxePBgw/emTp0qWrduLa3S/tZbb4mAgABhsViEEEIkJiaKm266Sdrv+uuvF88++6wQQoh169YJLy8vkZGRYXt/06ZNAoBYs2aNEEKItLQ0AUDs27dPCCHEli1bBACRk5MjlRsXFycWLlwopbVv317MmDFDCCHEhg0bhKenp0hPT7e9v27dOulYy5YtU86ptLRU+Pr6ig0bNhi2g1F98vPzhclkEqtWrbKlZWdnC19fX/HUU08JIYT49ddfhaZp4uTJk1J5vXr1Es8//7wQQohhw4aJ2267TXr/vvvuE8HBwbbtGTNmCG9vb5GVlWVL++ab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\n",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot the precipitation variable at an arbitrary time step\n",
"time_step = 800\n",
"ds.prcp[:, :, time_step].plot()"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "c5703934",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body[data-theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
"Dimensions: (time: 1466, grid_cells: 3306)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 1895-01-01 1895-02-01 ... 2017-02-01\n",
" * grid_cells (grid_cells) object MultiIndex\n",
" * lat (grid_cells) float32 24.56 24.56 24.56 ... 49.23 49.23 49.23\n",
" * lon (grid_cells) float32 -124.7 -124.0 -123.4 ... -68.02 -67.35\n",
"Data variables:\n",
" prcp (time, grid_cells) float32 nan nan nan nan ... nan nan nan nan\n",
"Attributes: (12/17)\n",
" date_created: 2017-01-04 04:00:08.008484\n",
" date_modified: 2017-01-04 04:00:08.011881\n",
" Conventions: CF-1.6, ACDD-1.3\n",
" ncei_template_version: NCEI_NetCDF_Grid_Template_v2.0\n",
" title: nClimGrid\n",
" naming_authority: gov.noaa.ncei\n",
" ... ...\n",
" geospatial_lon_max: -67.020836\n",
" geospatial_lat_units: degrees_north\n",
" geospatial_lon_units: degrees_east\n",
" history: Sat Apr 28 02:50:28 2018: C:\\home\\miniconda\\Li...\n",
" NCO: 4.7.1\n",
" nco_openmp_thread_number: 1</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-ca5d02f5-b46e-4d73-b342-11e562359de5' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-ca5d02f5-b46e-4d73-b342-11e562359de5' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 1466</li><li><span class='xr-has-index'>grid_cells</span>: 3306</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-ef3a0406-8d2a-4091-8d88-caed0226d5e5' class='xr-section-summary-in' type='checkbox' checked><label for='section-ef3a0406-8d2a-4091-8d88-caed0226d5e5' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1895-01-01 ... 2017-02-01</div><input id='attrs-485eb3ce-f719-45a0-a9e0-baa5b18cb567' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-485eb3ce-f719-45a0-a9e0-baa5b18cb567' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3edd575d-e763-4a67-828b-dadf68d5ab80' class='xr-var-data-in' type='checkbox'><label for='data-3edd575d-e763-4a67-828b-dadf68d5ab80' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Time, in monthly increments</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>axis :</span></dt><dd>T</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;1895-01-01T00:00:00.000000000&#x27;, &#x27;1895-02-01T00:00:00.000000000&#x27;,\n",
" &#x27;1895-03-01T00:00:00.000000000&#x27;, ..., &#x27;2016-12-01T00:00:00.000000000&#x27;,\n",
" &#x27;2017-01-01T00:00:00.000000000&#x27;, &#x27;2017-02-01T00:00:00.000000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>grid_cells</span></div><div class='xr-var-dims'>(grid_cells)</div><div class='xr-var-dtype'>object</div><div class='xr-var-preview xr-preview'>MultiIndex</div><input id='attrs-ec2016b1-352a-4088-9052-df585bbce539' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ec2016b1-352a-4088-9052-df585bbce539' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-61e57ceb-918a-49da-86f4-1b58f0710166' class='xr-var-data-in' type='checkbox'><label for='data-61e57ceb-918a-49da-86f4-1b58f0710166' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([(24.5625, -124.6875), (24.5625, -124.02083587646484),\n",
" (24.5625, -123.35416412353516), ..., (49.22916793823242, -68.6875),\n",
" (49.22916793823242, -68.02083587646484),\n",
" (49.22916793823242, -67.35416412353516)], dtype=object)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(grid_cells)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>24.56 24.56 24.56 ... 49.23 49.23</div><input id='attrs-7daf8e50-a0b9-49b9-a5a8-c09067be8e50' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7daf8e50-a0b9-49b9-a5a8-c09067be8e50' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-407d70fa-2186-4ffc-9633-913763b5d3bc' class='xr-var-data-in' type='checkbox'><label for='data-407d70fa-2186-4ffc-9633-913763b5d3bc' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>long_name :</span></dt><dd>Latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>axis :</span></dt><dd>Y</dd><dt><span>valid_min :</span></dt><dd>24.5625</dd><dt><span>valid_max :</span></dt><dd>49.354168</dd></dl></div><div class='xr-var-data'><pre>array([24.5625 , 24.5625 , 24.5625 , ..., 49.229168, 49.229168, 49.229168])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(grid_cells)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-124.7 -124.0 ... -68.02 -67.35</div><input id='attrs-12ae0b10-ad24-4511-9283-1cbada806f12' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-12ae0b10-ad24-4511-9283-1cbada806f12' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b29479e5-1aea-44e0-8eae-7fd0bff65972' class='xr-var-data-in' type='checkbox'><label for='data-b29479e5-1aea-44e0-8eae-7fd0bff65972' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>long_name :</span></dt><dd>Longitude</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>axis :</span></dt><dd>X</dd><dt><span>valid_min :</span></dt><dd>-124.6875</dd><dt><span>valid_max :</span></dt><dd>-67.020836</dd></dl></div><div class='xr-var-data'><pre>array([-124.6875 , -124.020836, -123.354164, ..., -68.6875 , -68.020836,\n",
" -67.354164])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-b69b68ce-69f3-41fc-b7d3-5864f139b95d' class='xr-section-summary-in' type='checkbox' checked><label for='section-b69b68ce-69f3-41fc-b7d3-5864f139b95d' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>prcp</span></div><div class='xr-var-dims'>(time, grid_cells)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-8f9205ed-a914-4c28-a485-521dd2a0fc74' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-8f9205ed-a914-4c28-a485-521dd2a0fc74' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-842de553-d4b8-494f-83ca-ba2d1b4a561c' class='xr-var-data-in' type='checkbox'><label for='data-842de553-d4b8-494f-83ca-ba2d1b4a561c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>references :</span></dt><dd>GHCN-Monthly Version 3 (Vose et al. 2011), NCEI/NOAA, https://www.ncdc.noaa.gov/ghcnm/v3.php</dd><dt><span>valid_min :</span></dt><dd>0.0</dd><dt><span>units :</span></dt><dd>millimeter</dd><dt><span>valid_max :</span></dt><dd>2000.0</dd><dt><span>standard_name :</span></dt><dd>precipitation_amount</dd><dt><span>long_name :</span></dt><dd>Precipitation, monthly total</dd></dl></div><div class='xr-var-data'><pre>array([[nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" ...,\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan],\n",
" [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-55770eb5-d6f6-4ff5-bdc0-dee81e35833e' class='xr-section-summary-in' type='checkbox' ><label for='section-55770eb5-d6f6-4ff5-bdc0-dee81e35833e' class='xr-section-summary' >Indexes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-260d9338-8c91-4f8e-9296-776c634ccdf6' class='xr-index-data-in' type='checkbox'/><label for='index-260d9338-8c91-4f8e-9296-776c634ccdf6' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;1895-01-01&#x27;, &#x27;1895-02-01&#x27;, &#x27;1895-03-01&#x27;, &#x27;1895-04-01&#x27;,\n",
" &#x27;1895-05-01&#x27;, &#x27;1895-06-01&#x27;, &#x27;1895-07-01&#x27;, &#x27;1895-08-01&#x27;,\n",
" &#x27;1895-09-01&#x27;, &#x27;1895-10-01&#x27;,\n",
" ...\n",
" &#x27;2016-05-01&#x27;, &#x27;2016-06-01&#x27;, &#x27;2016-07-01&#x27;, &#x27;2016-08-01&#x27;,\n",
" &#x27;2016-09-01&#x27;, &#x27;2016-10-01&#x27;, &#x27;2016-11-01&#x27;, &#x27;2016-12-01&#x27;,\n",
" &#x27;2017-01-01&#x27;, &#x27;2017-02-01&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;time&#x27;, length=1466, freq=None))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>grid_cells<br>lat<br>lon</div></div><div class='xr-index-preview'>PandasMultiIndex</div><div></div><input id='index-817b9fbf-0357-4997-a10a-5b5674cda2b4' class='xr-index-data-in' type='checkbox'/><label for='index-817b9fbf-0357-4997-a10a-5b5674cda2b4' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(MultiIndex([( 24.5625, -124.6875),\n",
" ( 24.5625, -124.02083587646484),\n",
" ( 24.5625, -123.35416412353516),\n",
" ( 24.5625, -122.6875),\n",
" ( 24.5625, -122.02083587646484),\n",
" ( 24.5625, -121.35416412353516),\n",
" ( 24.5625, -120.6875),\n",
" ( 24.5625, -120.02083587646484),\n",
" ( 24.5625, -119.35416412353516),\n",
" ( 24.5625, -118.6875),\n",
" ...\n",
" (49.22916793823242, -73.35416412353516),\n",
" (49.22916793823242, -72.6875),\n",
" (49.22916793823242, -72.02083587646484),\n",
" (49.22916793823242, -71.35416412353516),\n",
" (49.22916793823242, -70.6875),\n",
" (49.22916793823242, -70.02083587646484),\n",
" (49.22916793823242, -69.35416412353516),\n",
" (49.22916793823242, -68.6875),\n",
" (49.22916793823242, -68.02083587646484),\n",
" (49.22916793823242, -67.35416412353516)],\n",
" name=&#x27;grid_cells&#x27;, length=3306))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-fcc0248f-1272-4df6-9076-da2098880d5d' class='xr-section-summary-in' type='checkbox' ><label for='section-fcc0248f-1272-4df6-9076-da2098880d5d' class='xr-section-summary' >Attributes: <span>(17)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>date_created :</span></dt><dd>2017-01-04 04:00:08.008484</dd><dt><span>date_modified :</span></dt><dd>2017-01-04 04:00:08.011881</dd><dt><span>Conventions :</span></dt><dd>CF-1.6, ACDD-1.3</dd><dt><span>ncei_template_version :</span></dt><dd>NCEI_NetCDF_Grid_Template_v2.0</dd><dt><span>title :</span></dt><dd>nClimGrid</dd><dt><span>naming_authority :</span></dt><dd>gov.noaa.ncei</dd><dt><span>standard_name_vocabulary :</span></dt><dd>Standard Name Table v35</dd><dt><span>institution :</span></dt><dd>National Centers for Environmental Information (NCEI), NOAA, Department of Commerce</dd><dt><span>geospatial_lat_min :</span></dt><dd>24.5625</dd><dt><span>geospatial_lat_max :</span></dt><dd>49.354168</dd><dt><span>geospatial_lon_min :</span></dt><dd>-124.6875</dd><dt><span>geospatial_lon_max :</span></dt><dd>-67.020836</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees_north</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees_east</dd><dt><span>history :</span></dt><dd>Sat Apr 28 02:50:28 2018: C:\\home\\miniconda\\Library\\bin\\ncpdq.exe -a lat,lon,time nclimgrid_lowres_prcp.nc nclimgrid_prcp.nc</dd><dt><span>NCO :</span></dt><dd>4.7.1</dd><dt><span>nco_openmp_thread_number :</span></dt><dd>1</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (time: 1466, grid_cells: 3306)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 1895-01-01 1895-02-01 ... 2017-02-01\n",
" * grid_cells (grid_cells) object MultiIndex\n",
" * lat (grid_cells) float32 24.56 24.56 24.56 ... 49.23 49.23 49.23\n",
" * lon (grid_cells) float32 -124.7 -124.0 -123.4 ... -68.02 -67.35\n",
"Data variables:\n",
" prcp (time, grid_cells) float32 nan nan nan nan ... nan nan nan nan\n",
"Attributes: (12/17)\n",
" date_created: 2017-01-04 04:00:08.008484\n",
" date_modified: 2017-01-04 04:00:08.011881\n",
" Conventions: CF-1.6, ACDD-1.3\n",
" ncei_template_version: NCEI_NetCDF_Grid_Template_v2.0\n",
" title: nClimGrid\n",
" naming_authority: gov.noaa.ncei\n",
" ... ...\n",
" geospatial_lon_max: -67.020836\n",
" geospatial_lat_units: degrees_north\n",
" geospatial_lon_units: degrees_east\n",
" history: Sat Apr 28 02:50:28 2018: C:\\home\\miniconda\\Li...\n",
" NCO: 4.7.1\n",
" nco_openmp_thread_number: 1"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# stack the dataset on the lat and lon dimensions to create a multi-index for each grid cell's timeseries array\n",
"stacked_ds = ds.stack(grid_cells=('lat', 'lon',))\n",
"stacked_ds"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "8026a54c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body[data-theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray (time: 1466, lat: 38, lon: 87)&gt;\n",
"array([[[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" ...,\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]],\n",
"\n",
" [[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
"...\n",
" [ nan, -0.50018322, -0.76627377, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]],\n",
"\n",
" [[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" ...,\n",
" [ nan, -1.08467251, -0.56800502, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]]])\n",
"Coordinates:\n",
" * lat (lat) float64 24.56 25.23 25.9 26.56 ... 47.23 47.9 48.56 49.23\n",
" * lon (lon) float64 -124.7 -124.0 -123.4 -122.7 ... -68.69 -68.02 -67.35\n",
" * time (time) datetime64[ns] 1895-01-01 1895-02-01 ... 2017-02-01\n",
"Attributes:\n",
" description: SPI computed by the climate_indices Python package\n",
" references: https://github.com/monocongo/climate_indices\n",
" valid_min: -3.09\n",
" valid_max: 3.09</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 1466</li><li><span class='xr-has-index'>lat</span>: 38</li><li><span class='xr-has-index'>lon</span>: 87</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-27e049df-2b7c-4917-8acb-afcf29d0f07b' class='xr-array-in' type='checkbox' checked><label for='section-27e049df-2b7c-4917-8acb-afcf29d0f07b' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>nan nan nan nan nan nan nan nan ... nan nan nan nan nan nan nan nan</span></div><div class='xr-array-data'><pre>array([[[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" ...,\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]],\n",
"\n",
" [[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
"...\n",
" [ nan, -0.50018322, -0.76627377, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]],\n",
"\n",
" [[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" ...,\n",
" [ nan, -1.08467251, -0.56800502, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]]])</pre></div></div></li><li class='xr-section-item'><input id='section-b015f947-755f-4179-bd3c-2cc7e2c536d5' class='xr-section-summary-in' type='checkbox' checked><label for='section-b015f947-755f-4179-bd3c-2cc7e2c536d5' class='xr-section-summary' >Coordinates: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>24.56 25.23 25.9 ... 48.56 49.23</div><input id='attrs-e71bcee3-c181-4a80-b07a-0911d7b0afdb' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e71bcee3-c181-4a80-b07a-0911d7b0afdb' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f99b160d-3a81-432a-8d56-027350c2039f' class='xr-var-data-in' type='checkbox'><label for='data-f99b160d-3a81-432a-8d56-027350c2039f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([24.5625 , 25.229166, 25.895834, 26.5625 , 27.229166, 27.895834,\n",
" 28.5625 , 29.229166, 29.895834, 30.5625 , 31.229166, 31.895834,\n",
" 32.5625 , 33.229168, 33.895832, 34.5625 , 35.229168, 35.895832,\n",
" 36.5625 , 37.229168, 37.895832, 38.5625 , 39.229168, 39.895832,\n",
" 40.5625 , 41.229168, 41.895832, 42.5625 , 43.229168, 43.895832,\n",
" 44.5625 , 45.229168, 45.895832, 46.5625 , 47.229168, 47.895832,\n",
" 48.5625 , 49.229168])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-124.7 -124.0 ... -68.02 -67.35</div><input id='attrs-24288cd5-dab6-40f1-a151-561bc94e6319' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-24288cd5-dab6-40f1-a151-561bc94e6319' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-035f8cd4-8f3c-40d7-8f99-0e706615a3e4' class='xr-var-data-in' type='checkbox'><label for='data-035f8cd4-8f3c-40d7-8f99-0e706615a3e4' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-124.6875 , -124.020836, -123.354164, -122.6875 , -122.020836,\n",
" -121.354164, -120.6875 , -120.020836, -119.354164, -118.6875 ,\n",
" -118.020836, -117.354164, -116.6875 , -116.020836, -115.354164,\n",
" -114.6875 , -114.020836, -113.354164, -112.6875 , -112.020836,\n",
" -111.354164, -110.6875 , -110.020836, -109.354164, -108.6875 ,\n",
" -108.020836, -107.354164, -106.6875 , -106.020836, -105.354164,\n",
" -104.6875 , -104.020836, -103.354164, -102.6875 , -102.020836,\n",
" -101.354164, -100.6875 , -100.020836, -99.354164, -98.6875 ,\n",
" -98.020836, -97.354164, -96.6875 , -96.020836, -95.354164,\n",
" -94.6875 , -94.020836, -93.354164, -92.6875 , -92.020836,\n",
" -91.354164, -90.6875 , -90.020836, -89.354164, -88.6875 ,\n",
" -88.020836, -87.354164, -86.6875 , -86.020836, -85.354164,\n",
" -84.6875 , -84.020836, -83.354164, -82.6875 , -82.020836,\n",
" -81.354164, -80.6875 , -80.020836, -79.354164, -78.6875 ,\n",
" -78.020836, -77.354164, -76.6875 , -76.020836, -75.354164,\n",
" -74.6875 , -74.020836, -73.354164, -72.6875 , -72.020836,\n",
" -71.354164, -70.6875 , -70.020836, -69.354164, -68.6875 ,\n",
" -68.020836, -67.354164])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1895-01-01 ... 2017-02-01</div><input id='attrs-d42da5bc-1426-43a4-aec0-af2657a22533' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d42da5bc-1426-43a4-aec0-af2657a22533' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-74b47901-0754-4b6f-8100-58bc54b29838' class='xr-var-data-in' type='checkbox'><label for='data-74b47901-0754-4b6f-8100-58bc54b29838' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Time, in monthly increments</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>axis :</span></dt><dd>T</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;1895-01-01T00:00:00.000000000&#x27;, &#x27;1895-02-01T00:00:00.000000000&#x27;,\n",
" &#x27;1895-03-01T00:00:00.000000000&#x27;, ..., &#x27;2016-12-01T00:00:00.000000000&#x27;,\n",
" &#x27;2017-01-01T00:00:00.000000000&#x27;, &#x27;2017-02-01T00:00:00.000000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-755f3452-66e7-4073-8fc6-20d3447f4b8b' class='xr-section-summary-in' type='checkbox' ><label for='section-755f3452-66e7-4073-8fc6-20d3447f4b8b' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-254a91f0-7bea-4343-bd4e-f20c86ea4f36' class='xr-index-data-in' type='checkbox'/><label for='index-254a91f0-7bea-4343-bd4e-f20c86ea4f36' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;1895-01-01&#x27;, &#x27;1895-02-01&#x27;, &#x27;1895-03-01&#x27;, &#x27;1895-04-01&#x27;,\n",
" &#x27;1895-05-01&#x27;, &#x27;1895-06-01&#x27;, &#x27;1895-07-01&#x27;, &#x27;1895-08-01&#x27;,\n",
" &#x27;1895-09-01&#x27;, &#x27;1895-10-01&#x27;,\n",
" ...\n",
" &#x27;2016-05-01&#x27;, &#x27;2016-06-01&#x27;, &#x27;2016-07-01&#x27;, &#x27;2016-08-01&#x27;,\n",
" &#x27;2016-09-01&#x27;, &#x27;2016-10-01&#x27;, &#x27;2016-11-01&#x27;, &#x27;2016-12-01&#x27;,\n",
" &#x27;2017-01-01&#x27;, &#x27;2017-02-01&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;time&#x27;, length=1466, freq=None))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-41d93440-287b-48c7-a5dc-29ba68957529' class='xr-index-data-in' type='checkbox'/><label for='index-41d93440-287b-48c7-a5dc-29ba68957529' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([ 24.5625, 25.22916603088379, 25.89583396911621,\n",
" 26.5625, 27.22916603088379, 27.89583396911621,\n",
" 28.5625, 29.22916603088379, 29.89583396911621,\n",
" 30.5625, 31.22916603088379, 31.89583396911621,\n",
" 32.5625, 33.22916793823242, 33.89583206176758,\n",
" 34.5625, 35.22916793823242, 35.89583206176758,\n",
" 36.5625, 37.22916793823242, 37.89583206176758,\n",
" 38.5625, 39.22916793823242, 39.89583206176758,\n",
" 40.5625, 41.22916793823242, 41.89583206176758,\n",
" 42.5625, 43.22916793823242, 43.89583206176758,\n",
" 44.5625, 45.22916793823242, 45.89583206176758,\n",
" 46.5625, 47.22916793823242, 47.89583206176758,\n",
" 48.5625, 49.22916793823242],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;lat&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-f416fe13-967f-4186-a2e5-2205c3a52f83' class='xr-index-data-in' type='checkbox'/><label for='index-f416fe13-967f-4186-a2e5-2205c3a52f83' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([ -124.6875, -124.02083587646484, -123.35416412353516,\n",
" -122.6875, -122.02083587646484, -121.35416412353516,\n",
" -120.6875, -120.02083587646484, -119.35416412353516,\n",
" -118.6875, -118.02083587646484, -117.35416412353516,\n",
" -116.6875, -116.02083587646484, -115.35416412353516,\n",
" -114.6875, -114.02083587646484, -113.35416412353516,\n",
" -112.6875, -112.02083587646484, -111.35416412353516,\n",
" -110.6875, -110.02083587646484, -109.35416412353516,\n",
" -108.6875, -108.02083587646484, -107.35416412353516,\n",
" -106.6875, -106.02083587646484, -105.35416412353516,\n",
" -104.6875, -104.02083587646484, -103.35416412353516,\n",
" -102.6875, -102.02083587646484, -101.35416412353516,\n",
" -100.6875, -100.02083587646484, -99.35416412353516,\n",
" -98.6875, -98.02083587646484, -97.35416412353516,\n",
" -96.6875, -96.02083587646484, -95.35416412353516,\n",
" -94.6875, -94.02083587646484, -93.35416412353516,\n",
" -92.6875, -92.02083587646484, -91.35416412353516,\n",
" -90.6875, -90.02083587646484, -89.35416412353516,\n",
" -88.6875, -88.02083587646484, -87.35416412353516,\n",
" -86.6875, -86.02083587646484, -85.35416412353516,\n",
" -84.6875, -84.02083587646484, -83.35416412353516,\n",
" -82.6875, -82.02083587646484, -81.35416412353516,\n",
" -80.6875, -80.02083587646484, -79.35416412353516,\n",
" -78.6875, -78.02083587646484, -77.35416412353516,\n",
" -76.6875, -76.02083587646484, -75.35416412353516,\n",
" -74.6875, -74.02083587646484, -73.35416412353516,\n",
" -72.6875, -72.02083587646484, -71.35416412353516,\n",
" -70.6875, -70.02083587646484, -69.35416412353516,\n",
" -68.6875, -68.02083587646484, -67.35416412353516],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;lon&#x27;))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-2e5ce056-9db9-462c-862d-01be25105b08' class='xr-section-summary-in' type='checkbox' checked><label for='section-2e5ce056-9db9-462c-862d-01be25105b08' class='xr-section-summary' >Attributes: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>SPI computed by the climate_indices Python package</dd><dt><span>references :</span></dt><dd>https://github.com/monocongo/climate_indices</dd><dt><span>valid_min :</span></dt><dd>-3.09</dd><dt><span>valid_max :</span></dt><dd>3.09</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.DataArray (time: 1466, lat: 38, lon: 87)>\n",
"array([[[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" ...,\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]],\n",
"\n",
" [[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
"...\n",
" [ nan, -0.50018322, -0.76627377, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]],\n",
"\n",
" [[ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" ...,\n",
" [ nan, -1.08467251, -0.56800502, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan],\n",
" [ nan, nan, nan, ..., nan,\n",
" nan, nan]]])\n",
"Coordinates:\n",
" * lat (lat) float64 24.56 25.23 25.9 26.56 ... 47.23 47.9 48.56 49.23\n",
" * lon (lon) float64 -124.7 -124.0 -123.4 -122.7 ... -68.69 -68.02 -67.35\n",
" * time (time) datetime64[ns] 1895-01-01 1895-02-01 ... 2017-02-01\n",
"Attributes:\n",
" description: SPI computed by the climate_indices Python package\n",
" references: https://github.com/monocongo/climate_indices\n",
" valid_min: -3.09\n",
" valid_max: 3.09"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# group by the stacked dimension (i.e. each grid cell to itself), apply the function\n",
"# to the variables of the Dataset, then unstack back to our original dimensions\n",
"#spi_da = stacked_ds.groupby('grid_cells').map(\n",
"spi_ds = stacked_ds.groupby('grid_cells').apply(\n",
" spi_wrapper,\n",
" precip_var='prcp',\n",
" scale=3,\n",
" distribution=Distribution.gamma,\n",
" data_start_year=1895,\n",
" calibration_year_initial=1950,\n",
" calibration_year_final=2010,\n",
" periodicity=Periodicity.monthly,\n",
").unstack('grid_cells')\n",
"spi_ds"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "f6598986",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x7f7432d31cf0>"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhkAAAHFCAYAAABfDutCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABaMElEQVR4nO3deXxU5dk//s+ZSWay72SDkIQlbGFRUAkuLMqmIorlcauCVdtHxUcev0/rWg1ajVal2lpRWwtYtdjWiv6qgqgsLiCLoAiCgAEiJARC9m0yM/fvD5qRe66BLJPJmSSf9+s1L73uuc4595xZuHOfc65jKKUUiIiIiDqYxewOEBERUffEQQYREREFBAcZREREFBAcZBAREVFAcJBBREREAcFBBhEREQUEBxlEREQUEBxkEBERUUBwkEFEREQBwUEGdXmff/458vPzUVFRIZ6bMGECJkyY0Ol96izPPPMMZs2ahezsbBiGcdrXunLlSpx77rkIDw9HbGwsZsyYgR07dvjMra2txYMPPoicnBzY7XYkJiZi4sSJ2LNnj5b3wAMP4NJLL0Xv3r1hGAbmzp3b5tdQWlqKuXPnIikpCREREcjLy8NHH30k8hwOBx588EFkZ2fDZrMhMzMT9957L+rr69u0vT/84Q8YPHgw7HY7srOzsWDBAjQ1NWk5P/zwA+bPn4/x48cjLi4OhmFgyZIlbX5tRD0dBxnU5X3++edYsGCBz0HG888/j+eff77zO9VJXnjhBRw4cACTJk1Cr169Tpn39ttvY/r06UhOTsabb76JF154AXv27MH555+Pffv2abk1NTWYMGECXn75Zdxxxx344IMPsHjxYpxzzjmoq6vTcn/3u9+hrKwMl112GWw2W5v739jYiAsvvBAfffQRnn32Wbz99ttISUnBtGnTsHbtWi33mmuuwZNPPomf//zneO+993DzzTdj4cKFuOqqq1q9vUcffRR33nknZs2ahZUrV+K2227DY489httvv13L27t3L1577TXYbDZcfPHFbX5dRPQfiqiLe/LJJxUAVVhYaHZXOp3L5fL8/7Bhw9T48eN95g0aNEiNGDFCud1uT9v+/fuVzWZT1157rZZ75513qsjISLVv3742bT8yMlLNmTOnTf3/4x//qACozz//3NPW1NSkhg4dqs4++2xP2/r16xUA9fTTT2vLP/bYYwqA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94mO+0PiPtFxf+gCsT+UUqiurkZ6ejoslsBdgNnQ0ACHw+H3emw2W9AOMIAecLjEYrEEbDTaHq09C7gn4T7RcX9I3Cc67g9dR++P2NjYDlvXqYSFhQX14KCjsE4GERERBQQHGURERBQQHGR0Ervdjoceeoi3oT8J94mO+0PiPtFxf+i4P4Jftz/xk4iIiMzBmQwiIiIKCA4yiIiIKCA4yCAiIqKA4CCDiIiIAoKDjAB49NFHMW7cOERERCAuLk48/9VXX+Gaa65BRkYGwsPDMWTIEDz77LMib/v27Rg/fjzCw8PRu3dvPPzww51TT7+DtbQ/AODOO+/E6NGjYbfbMWrUKJ853WV/AK3bJwcPHsSMGTMQGRmJpKQk/M///I+oENid9snJvvzyS0yePBlxcXFITEzEz3/+c9TU1Gg5rdk/3cl3332HmTNnIikpCTExMTj33HOxevVqLaen7JM1a9bAMAyfj02bNnnyesr+CGYcZASAw+HA7Nmzceutt/p8fsuWLejVqxdeffVV7NixA/fffz/uvfdePPfcc56cqqoqTJ48Genp6di0aRP+8Ic/4KmnnsLChQs762V0mJb2B3CilO/PfvYzXHXVVT6f7077A2h5n7hcLlxyySWora3Fp59+imXLluHNN9/E//t//8+T0932SbPDhw/joosuwoABA/DFF19gxYoV2LFjB+bOnevJac3+6W4uueQSOJ1OfPzxx9iyZQtGjRqFSy+91HP/i560T8aNG4fi4mLtcfPNNyMrKwtjxowB0LP2R1BTFDCLFy9WsbGxrcq97bbb1MSJEz3x888/r2JjY1VDQ4OnraCgQKWnpyu3293RXe0UrdkfDz30kBo5cqRo7477Q6lT75P33ntPWSwWdejQIU/b3/72N2W321VlZaVSqvvukxdffFElJycrl8vladu6dasCoPbs2aOUat3+6U6OHj2qAKh169Z52qqqqhQA9eGHHyqlet4+OZnD4VDJycnq4Ycf9rT15P0RTDiTESQqKyuRkJDgidevX4/x48drRWamTp2Kw4cPY//+/Sb00Fw9bX+sX78eubm5SE9P97RNnToVjY2N2LJliyenO+6TxsZG2Gw27eZU4eHhAIBPP/0UQOv2T3eSmJiIIUOG4JVXXkFtbS2cTidefPFFpKSkYPTo0QB63j452TvvvINjx45ps109eX8EEw4ygsD69evx97//Hb/4xS88bSUlJUhJSdHymuOOuD1wV9PT9oev1xsfHw+bzeZ5vd11n0yaNAklJSV48skn4XA4UF5ejvvuuw8AUFxcDKB1+6c7MQwDq1atwtatWxEdHY2wsDD87ne/w4oVKzzn9PS0fXKyl19+GVOnTkVGRoanrSfvj2DCQUYr5efnn/JEo+bH5s2b27zeHTt2YObMmXjwwQcxefJk7TnvW9Or/5zQZ+Yt65sFan+cTjDvD6Dj94mv16WU0tqDfZ+crLX7Z9iwYVi6dCmefvppREREIDU1Ff369UNKSgqsVqtnfa3ZP8GutftEKYXbbrsNycnJ+OSTT7Bx40bMnDkTl156qWfgBXT9fdKe79APP/yAlStX4qabbhLr6+r7ozvo9rd67yjz5s3D1VdffdqcrKysNq1z586dmDRpEm655RY88MAD2nOpqalitF1aWgoAYnRuhkDsj9MJ9v0BdOw+SU1NxRdffKG1lZeXo6mpyfN6u8I+OVlb9s+1116La6+9FkeOHEFkZCQMw8DChQuRnZ0NoHX7pyto7T75+OOP8e9//xvl5eWeW5o///zzWLVqFZYuXYp77rmnW+yT9nyHFi9ejMTERFx22WVae3fYH90BBxmtlJSUhKSkpA5b344dOzBp0iTMmTMHjz76qHg+Ly8P9913HxwOB2w2GwDggw8+QHp6eof+491eHb0/WhLs+wPo2H2Sl5eHRx99FMXFxUhLSwNw4vXa7XbPMfiusE9O1p790/yPwV/+8heEhYV5Zvtas3+6gtbuk7q6OgDQzlNpjt1uN4DusU/a+hlRSmHx4sW44YYbEBoaqj3XHfZHt2DaKafd2IEDB9TWrVvVggULVFRUlNq6davaunWrqq6uVkop9c0336hevXqp6667ThUXF3sepaWlnnVUVFSolJQUdc0116jt27erf/3rXyomJkY99dRTZr2sdmtpfyil1J49e9TWrVvVL37xC5WTk+PJaWxsVEp1r/2hVMv7xOl0qtzcXHXhhReqL7/8Un344YeqT58+at68eZ51dLd9crI//OEPasuWLWr37t3queeeU+Hh4erZZ5/1PN+a/dOdHD16VCUmJqpZs2apbdu2qd27d6v/+7//U6GhoWrbtm1KqZ63T5RS6sMPP1QA1M6dO8VzPXF/BCMOMgJgzpw5CoB4rF69Wil14jJNX89nZmZq6/n666/V+eefr+x2u0pNTVX5+fld8tLElvaHUkqNHz/eZ05hYaEnp7vsD6Vat08OHDigLrnkEhUeHq4SEhLUvHnztMtVlepe++Rk119/vUpISFA2m02NGDFCvfLKKyKnNfunO9m0aZOaMmWKSkhIUNHR0Wrs2LHqvffe03J62j655ppr1Lhx4075fE/bH8GIt3onIiKigODVJURERBQQHGQQERFRQHCQQURERAHBQQYREREFBAcZREREFBAcZBAREVFAcJBBREREAcFBBlE3NGHCBMyfP9/sbhBRD8dBBhEREQUEBxlEREQUEBxkEHVz5eXluOGGGxAfH4+IiAhMnz4de/bs8Ty/ZMkSxMXFYeXKlRgyZAiioqIwbdo0FBcXm9hrIuoOOMgg6ubmzp2LzZs345133sH69euhlMLFF1+MpqYmT05dXR2eeuop/PWvf8W6detw8OBB/N///Z+JvSai7iDE7A4QUeDs2bMH77zzDj777DOMGzcOAPDaa68hIyMDy5cvx+zZswEATU1NeOGFF9C/f38AwLx58/Dwww+b1m8i6h44k0HUjX377bcICQnBOeec42lLTEzEoEGD8O2333raIiIiPAMMAEhLS0NpaWmn9pWIuh8OMoi6MaXUKdsNw/DEoaGh2vOGYZxyWSKi1uIgg6gbGzp0KJxOJ7744gtPW1lZGb777jsMGTLExJ4RUU/AQQZRNzZw4EDMnDkTt9xyCz799FN89dVX+OlPf4revXtj5syZZnePiLo5DjKIurnFixdj9OjRuPTSS5GXlwelFN577z1xiISIqKMZigdeiYiIKAA4k0FEREQBwUEGERERBQQHGURERBQQHGQQERFRQHCQQURERAHBQQYREREFBAcZREREFBAcZBAREVFAcJBBREREAcFBBhEREQUEBxlEREQUEBxkEBERUUD8/xSgMB1iSgKwAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot the result dataset at the same time step for a quick visual comparison\n",
"spi_ds.isel({'time': time_step,}).plot()"
]
}
],
"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.10.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment