2024-10-18 16:30:09 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tutorial on Climatologies using Climate Data from C3S\n",
"\n",
"### About\n",
"This tutorial originates from the Copernicus Climate Change Service (C3S) Data Tutorials at https://ecmwf-projects.github.io/copernicus-training-c3s/reanalysis-climatology.html. It has been sligthly modified to enable fine-tuned executions. \n",
"\n",
"In this tutorial we will access data from the Climate Data Store (CDS) of the Copernicus Climate Change Service (C3S), and analyse climatologies and trends in near-surface air temperature. The tutorial comprises the following steps:\n",
"\n",
"1. Search, download and view data\n",
"2. Calculate a climate normal\n",
"3. Visualise anomalies with respect to the normal\n",
"4. Calculate monthly climatology and anomalies\n",
"5. View time series and analyse trends"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 1,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"# Set the range for the calculation of the climate normal\n",
"year_lower = 1979 # the average of the yearly-mean near-surface air temperature for the reference period year_lower-year_higher.\n",
"year_higher = 2009 # year_lower has to be greater or equal than 1979 and year_higher has to be lower or equal than 2021\n",
"\n",
"# Set the range for the anomaly calculation\n",
"y2c = 2010 # first year to calculate the anomaly. The year has be greater or equal than 1979\n",
"y2f = 2021 # last year to calculate the anomaly. The year has be lower or equal than 2021"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Search, download and view data\n",
"\n",
"Before we begin we must prepare our environment. This includes installing the Application Programming Interface (API) of the CDS, and importing the various python libraries that we will need.\n",
"\n",
"#### Install CDS API\n",
"\n",
"To install the CDS API, run the following command. We use an exclamation mark to pass the command to the shell (not to the Python interpreter)."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 2,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-10-18 16:31:00 +02:00
"Requirement already satisfied: cdsapi>=0.7.2 in ./venv/lib/python3.12/site-packages (0.7.3)\n",
"Requirement already satisfied: cads-api-client>=1.3.2 in ./venv/lib/python3.12/site-packages (from cdsapi>=0.7.2) (1.4.5)\n",
"Requirement already satisfied: requests>=2.5.0 in ./venv/lib/python3.12/site-packages (from cdsapi>=0.7.2) (2.32.3)\n",
"Requirement already satisfied: tqdm in ./venv/lib/python3.12/site-packages (from cdsapi>=0.7.2) (4.66.5)\n",
"Requirement already satisfied: attrs in ./venv/lib/python3.12/site-packages (from cads-api-client>=1.3.2->cdsapi>=0.7.2) (24.2.0)\n",
"Requirement already satisfied: multiurl in ./venv/lib/python3.12/site-packages (from cads-api-client>=1.3.2->cdsapi>=0.7.2) (0.3.1)\n",
"Requirement already satisfied: typing-extensions in ./venv/lib/python3.12/site-packages (from cads-api-client>=1.3.2->cdsapi>=0.7.2) (4.12.2)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in ./venv/lib/python3.12/site-packages (from requests>=2.5.0->cdsapi>=0.7.2) (3.4.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in ./venv/lib/python3.12/site-packages (from requests>=2.5.0->cdsapi>=0.7.2) (3.10)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in ./venv/lib/python3.12/site-packages (from requests>=2.5.0->cdsapi>=0.7.2) (2.2.3)\n",
"Requirement already satisfied: certifi>=2017.4.17 in ./venv/lib/python3.12/site-packages (from requests>=2.5.0->cdsapi>=0.7.2) (2024.8.30)\n",
"Requirement already satisfied: pytz in ./venv/lib/python3.12/site-packages (from multiurl->cads-api-client>=1.3.2->cdsapi>=0.7.2) (2024.2)\n",
"Requirement already satisfied: python-dateutil in ./venv/lib/python3.12/site-packages (from multiurl->cads-api-client>=1.3.2->cdsapi>=0.7.2) (2.9.0.post0)\n",
"Requirement already satisfied: six>=1.5 in ./venv/lib/python3.12/site-packages (from python-dateutil->multiurl->cads-api-client>=1.3.2->cdsapi>=0.7.2) (1.16.0)\n"
2024-10-18 16:30:09 +02:00
]
}
],
"source": [
2024-10-18 16:31:00 +02:00
"!pip install 'cdsapi>=0.7.2'\n",
" \n",
"# !pip install --upgrade --force-reinstall cdsapi"
2024-10-18 16:30:09 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Import libraries\n",
"\n",
"We will be working with data in NetCDF format. To best handle this data we will use libraries for working with multidimensional arrays, in particular Xarray. We will also need libraries for plotting and viewing data, in this case we will use Matplotlib and Cartopy."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 3,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"# CDS API\n",
"import cdsapi\n",
"\n",
"# Libraries for working with multidimensional arrays\n",
"import numpy as np\n",
"import xarray as xr\n",
"\n",
"# Libraries for plotting and visualising data\n",
"import matplotlib.path as mpath\n",
"import matplotlib.pyplot as plt\n",
"import cartopy.crs as ccrs\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"import cartopy.feature as cfeature\n",
"\n",
"# Disable warnings for data download via API\n",
"import urllib3 \n",
"urllib3.disable_warnings()\n",
"\n",
"# Date an time modules\n",
"import datetime as dt\n",
"import time as tm\n",
"import calendar"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Enter your CDS API key\n",
"\n",
"We will request data from the Climate Data Store (CDS) programmatically with the help of the CDS API. Let us make use of the option to manually set the CDS API credentials. First, you have to define two variables: `URL` and `KEY` which build together your CDS API key. The string of characters that make up your KEY include your personal User ID and CDS API key. To obtain these, first register or login to the CDS (http://cds.climate.copernicus.eu), then visit https://cds.climate.copernicus.eu/api-how-to and copy the string of characters listed after \"key:\". Replace the `#########` below with this string."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 4,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
2024-10-18 16:31:00 +02:00
"URL = 'https://cds-beta.climate.copernicus.eu/api'\n",
"KEY = 'db1f2085-6b8b-42e6-b832-625dfaf831a4'"
2024-10-18 16:30:09 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we specify a data directory in which we will download our data and all output files that we will generate:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 5,
2024-10-18 16:30:09 +02:00
"metadata": {},
2024-10-18 16:31:00 +02:00
"outputs": [],
2024-10-18 16:30:09 +02:00
"source": [
"DATADIR = './dataDir/'\n",
2024-10-18 16:31:00 +02:00
"!mkdir -p $DATADIR\n",
2024-10-18 16:30:09 +02:00
"#strike_time = dt.datetime.strptime('01/01/79 00:00:00.000', '%m/%d/%y %H:%M:%S.%f')\n",
"#DAY = (dt.datetime.now() - strike_time).total_seconds() # seconds from the first day of the observation\n",
"DATE = dt.datetime.now()\n",
"SEC = calendar.timegm(DATE.timetuple())\n",
"NEWDIR = './dataDir/' + str (SEC) # \n",
"!mkdir $NEWDIR\n",
"NEWDIR = NEWDIR + '/'\n",
"DATADIR = NEWDIR"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"#### Search for data\n",
"\n",
"To search for data, visit the CDS website: http://cds.climate.copernicus.eu.\n",
"Here you can search for ERA5 data using the search bar. The data we need for this tutorial is the [ERA5 monthly averaged data on single levels from 1979 to present](https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels-monthly-means?tab=overview). ERA5 is the 5th version of the ECMWF Reanalysis dataset. Reanalysis uses a state of the art forecast model and data assimilation system to create a consistent \"map without gaps\" of observed and modelled climate variables over the past decades."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Having selected the correct dataset, we now need to specify what product type, variables, temporal and geographic coverage we are interested in. These can all be selected in the **\"Download data\"** tab. In this tab a form appears in which we will select the following parameters to download:\n",
"\n",
"- Product type: `Monthly averaged reanalysis`\n",
"- Variable: `2m temperature`\n",
"- Year: `1979 to year before present`\n",
"- Month: `all`\n",
"- Time: `00:00` (default)\n",
"- Geographical area: `Europe` \n",
"- Format: `NetCDF`\n",
"\n",
"At the end of the download form, select **\"Show API request\"**. This will reveal a block of code, which you can simply copy and paste into a cell of your Jupyter Notebook (see cell below) ...\n",
"\n",
"#### Download data\n",
"\n",
"... having copied the API request into the cell below, running this will retrieve and download the data you requested into your local directory. However, before you run the cell below, the **terms and conditions** of this particular dataset need to have been accepted in the CDS. The option to view and accept these conditions is given at the end of the download form, just above the **\"Show API request\"** option."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 6,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
2024-10-18 16:31:00 +02:00
"2024-10-18 15:55:24,807 INFO [2024-09-28T00:00:00] **Welcome to the New Climate Data Store (CDS)!** This new system is in its early days of full operations and still undergoing enhancements and fine tuning. Some disruptions are to be expected. Your \n",
"[feedback](https://jira.ecmwf.int/plugins/servlet/desk/portal/1/create/202) is key to improve the user experience on the new CDS for the benefit of everyone. Thank you.\n",
"2024-10-18 15:55:24,807 WARNING [2024-09-26T00:00:00] Should you have not yet migrated from the old CDS system to the new CDS, please check our [informative page](https://confluence.ecmwf.int/x/uINmFw) for guidance.\n",
"2024-10-18 15:55:24,808 INFO [2024-09-26T00:00:00] Watch our [Forum](https://forum.ecmwf.int/) for Announcements, news and other discussed topics.\n",
"2024-10-18 15:55:24,808 INFO [2024-09-16T00:00:00] Remember that you need to have an ECMWF account to use the new CDS. **Your old CDS credentials will not work in new CDS!**\n",
"2024-10-18 15:55:24,808 WARNING [2024-06-16T00:00:00] CDS API syntax is changed and some keys or parameter names may have also changed. To avoid requests failing, please use the \"Show API request code\" tool on the dataset Download Form to check you are using the correct syntax for your API request.\n",
"2024-10-18 15:55:26,352 WARNING [2024-10-10T00:00:00] The final validated ERA5 differs from ERA5T in July 2024 - please refer to our\n",
"[Forum announcement](https://forum.ecmwf.int/t/final-validated-era5-product-to-differ-from-era5t-in-july-2024/6685)\n",
"for details and watch it for further updates on this.\n",
"2024-10-18 15:55:26,353 INFO Request ID is d970c2b6-3ae5-43ed-89e6-3a038b6af7d1\n",
"2024-10-18 15:55:26,393 INFO status has been updated to accepted\n",
"2024-10-18 15:55:28,296 INFO status has been updated to running\n",
"2024-10-18 15:55:39,311 INFO status has been updated to successful\n",
" \r"
2024-10-18 16:30:09 +02:00
]
},
{
"data": {
"text/plain": [
2024-10-18 16:31:00 +02:00
"'./dataDir/1729266924/era5_monthly_t2m_eur.nc'"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 6,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c = cdsapi.Client(url=URL, key=KEY)\n",
"c.retrieve(\n",
" 'reanalysis-era5-single-levels-monthly-means',\n",
" {\n",
" 'product_type': 'monthly_averaged_reanalysis',\n",
" 'variable': '2m_temperature',\n",
" 'year': [\n",
" '1979', '1980', '1981',\n",
" '1982', '1983', '1984',\n",
" '1985', '1986', '1987',\n",
" '1988', '1989', '1990',\n",
" '1991', '1992', '1993',\n",
" '1994', '1995', '1996',\n",
" '1997', '1998', '1999',\n",
" '2000', '2001', '2002',\n",
" '2003', '2004', '2005',\n",
" '2006', '2007', '2008',\n",
" '2009', '2010', '2011',\n",
" '2012', '2013', '2014',\n",
" '2015', '2016', '2017',\n",
" '2018', '2019', '2020',\n",
" ],\n",
" 'month': [\n",
" '01', '02', '03',\n",
" '04', '05', '06',\n",
" '07', '08', '09',\n",
" '10', '11', '12',\n",
" ],\n",
" 'time': '00:00',\n",
" 'area': [\n",
" 72, -25, 34,\n",
" 40,\n",
" ],\n",
2024-10-18 16:31:00 +02:00
" 'data_format': 'netcdf_legacy',\n",
2024-10-18 16:30:09 +02:00
" },\n",
" f'{DATADIR}era5_monthly_t2m_eur.nc')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Inspect data\n",
"\n",
"Now that we have downloaded the data, we can inspect it. We have requested the data in NetCDF format. This is a commonly used format for array-oriented scientific data. To read and process this data we will make use of the [Xarray](http://xarray.pydata.org/en/stable/) library. Xarray is an open source project and Python package that makes working with labelled multi-dimensional arrays simple and efficient. We will read the data from our NetCDF file into an [xarray.Dataset](https://xarray.pydata.org/en/stable/generated/xarray.Dataset.html)."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 7,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"t2m = f'{DATADIR}era5_monthly_t2m_eur.nc'"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 8,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"# Create Xarray Dataset\n",
"ds = xr.open_dataset(t2m)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can query our newly created Xarray dataset ..."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 9,
2024-10-18 16:30:09 +02:00
"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",
2024-10-18 16:31:00 +02:00
"html[data-theme=dark],\n",
"body[data-theme=dark],\n",
2024-10-18 16:30:09 +02:00
"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",
2024-10-18 16:31:00 +02:00
" display: block !important;\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
2024-10-18 16:30:09 +02:00
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
2024-10-18 16:31:00 +02:00
" display: inline-block;\n",
" opacity: 0;\n",
2024-10-18 16:30:09 +02:00
"}\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",
2024-10-18 16:31:00 +02:00
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
2024-10-18 16:30:09 +02:00
".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",
2024-10-18 16:31:00 +02:00
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
2024-10-18 16:30:09 +02:00
".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",
2024-10-18 16:31:00 +02:00
".xr-var-data,\n",
".xr-index-data {\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
2024-10-18 16:30:09 +02:00
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
2024-10-18 16:31:00 +02:00
".xr-index-name div,\n",
".xr-index-data,\n",
2024-10-18 16:30:09 +02:00
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
2024-10-18 16:31:00 +02:00
".xr-var-data,\n",
".xr-index-data {\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset> Size: 161MB\n",
"Dimensions: (longitude: 261, latitude: 153, time: 504)\n",
2024-10-18 16:30:09 +02:00
"Coordinates:\n",
2024-10-18 16:31:00 +02:00
" * longitude (longitude) float32 1kB -25.0 -24.75 -24.5 ... 39.5 39.75 40.0\n",
" * latitude (latitude) float32 612B 72.0 71.75 71.5 71.25 ... 34.5 34.25 34.0\n",
" * time (time) datetime64[ns] 4kB 1979-01-01 1979-02-01 ... 2020-12-01\n",
2024-10-18 16:30:09 +02:00
"Data variables:\n",
2024-10-18 16:31:00 +02:00
" t2m (time, latitude, longitude) float64 161MB ...\n",
2024-10-18 16:30:09 +02:00
"Attributes:\n",
" Conventions: CF-1.6\n",
2024-10-18 16:31:00 +02:00
" history: 2024-10-18 10:47:17 GMT by grib_to_netcdf-2.36.0: grib_to_n...</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-3a15167d-df5a-4687-a6d2-814848e85a74' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-3a15167d-df5a-4687-a6d2-814848e85a74' 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'>longitude</span>: 261</li><li><span class='xr-has-index'>latitude</span>: 153</li><li><span class='xr-has-index'>time</span>: 504</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-85511eb7-0669-45a2-b302-5d736a4cd63d' class='xr-section-summary-in' type='checkbox' checked><label for='section-85511eb7-0669-45a2-b302-5d736a4cd63d' 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'>longitude</span></div><div class='xr-var-dims'>(longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-25.0 -24.75 -24.5 ... 39.75 40.0</div><input id='attrs-635adfe3-5110-4616-abd4-4760cd113862' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-635adfe3-5110-4616-abd4-4760cd113862' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e0b042fd-4556-422f-a657-2163276a40bd' class='xr-var-data-in' type='checkbox'><label for='data-e0b042fd-4556-422f-a657-2163276a40bd' 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>units :</span></dt><dd>degrees_east</dd><dt><span>long_name :</span></dt><dd>longitude</dd></dl></div><div class='xr-var-data'><pre>array([-25. , -24.75, -24.5 , ..., 39.5 , 39.75, 40. ], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>latitude</span></div><div class='xr-var-dims'>(latitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>72.0 71.75 71.5 ... 34.5 34.25 34.0</div><input id='attrs-a653d33e-e7e1-465d-8216-c47799ed19e1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a653d33e-e7e1-465d-8216-c47799ed19e1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-51a7011c-dd65-4549-bcee-55a04ab4e6b8' class='xr-var-data-in' type='checkbox'><label for='data-51a7011c-dd65-4549-bcee-55a04ab4e6b8' 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>units :</span></dt><dd>degrees_north</dd><dt><span>long_name :</span></dt><dd>latitude</dd></dl></div><div class='xr-var-data'><pre>array([72. , 71.75, 71.5 , 71.25, 71. , 70.75, 70.5 , 70.25, 70. , 69.75,\n",
2024-10-18 16:30:09 +02:00
" 69.5 , 69.25, 69. , 68.75, 68.5 , 68.25, 68. , 67.75, 67.5 , 67.25,\n",
" 67. , 66.75, 66.5 , 66.25, 66. , 65.75, 65.5 , 65.25, 65. , 64.75,\n",
" 64.5 , 64.25, 64. , 63.75, 63.5 , 63.25, 63. , 62.75, 62.5 , 62.25,\n",
" 62. , 61.75, 61.5 , 61.25, 61. , 60.75, 60.5 , 60.25, 60. , 59.75,\n",
" 59.5 , 59.25, 59. , 58.75, 58.5 , 58.25, 58. , 57.75, 57.5 , 57.25,\n",
" 57. , 56.75, 56.5 , 56.25, 56. , 55.75, 55.5 , 55.25, 55. , 54.75,\n",
" 54.5 , 54.25, 54. , 53.75, 53.5 , 53.25, 53. , 52.75, 52.5 , 52.25,\n",
" 52. , 51.75, 51.5 , 51.25, 51. , 50.75, 50.5 , 50.25, 50. , 49.75,\n",
" 49.5 , 49.25, 49. , 48.75, 48.5 , 48.25, 48. , 47.75, 47.5 , 47.25,\n",
" 47. , 46.75, 46.5 , 46.25, 46. , 45.75, 45.5 , 45.25, 45. , 44.75,\n",
" 44.5 , 44.25, 44. , 43.75, 43.5 , 43.25, 43. , 42.75, 42.5 , 42.25,\n",
" 42. , 41.75, 41.5 , 41.25, 41. , 40.75, 40.5 , 40.25, 40. , 39.75,\n",
" 39.5 , 39.25, 39. , 38.75, 38.5 , 38.25, 38. , 37.75, 37.5 , 37.25,\n",
" 37. , 36.75, 36.5 , 36.25, 36. , 35.75, 35.5 , 35.25, 35. , 34.75,\n",
2024-10-18 16:31:00 +02:00
" 34.5 , 34.25, 34. ], 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'>1979-01-01 ... 2020-12-01</div><input id='attrs-bf03bdca-2d8e-4c1f-8c0f-a1ec1eb59c7f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-bf03bdca-2d8e-4c1f-8c0f-a1ec1eb59c7f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9aded187-3a87-4050-8ee7-3a21d5fe7339' class='xr-var-data-in' type='checkbox'><label for='data-9aded187-3a87-4050-8ee7-3a21d5fe7339' 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</dd></dl></div><div class='xr-var-data'><pre>array(['1979-01-01T00:00:00.000000000', '1979-02-01T00:00:00.000000000',\n",
2024-10-18 16:30:09 +02:00
" '1979-03-01T00:00:00.000000000', ..., '2020-10-01T00:00:00.000000000',\n",
" '2020-11-01T00:00:00.000000000', '2020-12-01T00:00:00.000000000'],\n",
2024-10-18 16:31:00 +02:00
" dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-3af3e6e7-8f49-4c52-8cf9-896c627cd58a' class='xr-section-summary-in' type='checkbox' checked><label for='section-3af3e6e7-8f49-4c52-8cf9-896c627cd58a' 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>t2m</span></div><div class='xr-var-dims'>(time, latitude, longitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-1ef53142-35d7-4d8a-9584-4850b073f438' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1ef53142-35d7-4d8a-9584-4850b073f438' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4854b4a1-84e7-4c6b-a10e-fb7e244bbd20' class='xr-var-data-in' type='checkbox'><label for='data-4854b4a1-84e7-4c6b-a10e-fb7e244bbd20' 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>units :</span></dt><dd>K</dd><dt><span>long_name :</span></dt><dd>2 metre temperature</dd></dl></div><div class='xr-var-data'><pre>[20126232 values with dtype=float64]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-1dbabefa-72b9-4a62-91fc-c9a34acaf166' class='xr-section-summary-in' type='checkbox' ><label for='section-1dbabefa-72b9-4a62-91fc-c9a34acaf166' 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>longitude</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-c335d291-ebd8-485a-8ef7-0e2ebec789c9' class='xr-index-data-in' type='checkbox'/><label for='index-c335d291-ebd8-485a-8ef7-0e2ebec789c9' 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(Index([ -25.0, -24.75, -24.5, -24.25, -24.0, -23.75, -23.5, -23.25, -23.0,\n",
" -22.75,\n",
" ...\n",
" 37.75, 38.0, 38.25, 38.5, 38.75, 39.0, 39.25, 39.5, 39.75,\n",
" 40.0],\n",
" dtype='float32', name='longitude', length=261))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>latitude</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-65cab183-8208-4bf7-8079-ac5c52c6cbf6' class='xr-index-data-in' type='checkbox'/><label for='index-65cab183-8208-4bf7-8079-ac5c52c6cbf6' 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(Index([ 72.0, 71.75, 71.5, 71.25, 71.0, 70.75, 70.5, 70.25, 70.0, 69.75,\n",
" ...\n",
" 36.25, 36.0, 35.75, 35.5, 35.25, 35.0, 34.75, 34.5, 34.25, 34.0],\n",
" dtype='float32', name='latitude', length=153))</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-dd5436ab-b8ce-480d-9625-518d8d1f951f' class='xr-index-data-in' type='checkbox'/><label for='index-dd5436ab-b8ce-480d-9625-518d8d1f951f' 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(['1979-01-01', '1979-02-01', '1979-03-01', '1979-04-01',\n",
" '1979-05-01', '1979-06-01', '1979-07-01', '1979-08-01',\n",
" '1979-09-01', '1979-10-01',\n",
" ...\n",
" '2020-03-01', '2020-04-01', '2020-05-01', '2020-06-01',\n",
" '2020-07-01', '2020-08-01', '2020-09-01', '2020-10-01',\n",
" '2020-11-01', '2020-12-01'],\n",
" dtype='datetime64[ns]', name='time', length=504, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-36638d48-9631-4c9b-b157-8d852d8e8852' class='xr-section-summary-in' type='checkbox' checked><label for='section-36638d48-9631-4c9b-b157-8d852d8e8852' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.6</dd><dt><span>history :</span></dt><dd>2024-10-18 10:47:17 GMT by grib_to_netcdf-2.36.0: grib_to_netcdf -S param -o data.nc data.grib</dd></dl></div></li></ul></div></div>"
2024-10-18 16:30:09 +02:00
],
"text/plain": [
2024-10-18 16:31:00 +02:00
"<xarray.Dataset> Size: 161MB\n",
"Dimensions: (longitude: 261, latitude: 153, time: 504)\n",
2024-10-18 16:30:09 +02:00
"Coordinates:\n",
2024-10-18 16:31:00 +02:00
" * longitude (longitude) float32 1kB -25.0 -24.75 -24.5 ... 39.5 39.75 40.0\n",
" * latitude (latitude) float32 612B 72.0 71.75 71.5 71.25 ... 34.5 34.25 34.0\n",
" * time (time) datetime64[ns] 4kB 1979-01-01 1979-02-01 ... 2020-12-01\n",
2024-10-18 16:30:09 +02:00
"Data variables:\n",
2024-10-18 16:31:00 +02:00
" t2m (time, latitude, longitude) float64 161MB ...\n",
2024-10-18 16:30:09 +02:00
"Attributes:\n",
" Conventions: CF-1.6\n",
2024-10-18 16:31:00 +02:00
" history: 2024-10-18 10:47:17 GMT by grib_to_netcdf-2.36.0: grib_to_n..."
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 9,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the dataset has one variable called **\"t2m\"**, which stands for \"2 metre temperature\", and three coordinates of **longitude**, **latitude** and **time**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Convert longitude to [-180, 180] grid\n",
"\n",
"Notice that the `longitude` variables in the Xarray Dataset and Data Array objects are in the range of `[0, 359.75]`. By default, ECMWF data are on a [0, 360] grid. Should you wish to, there are two options to bring the longitude coordinates to a `[-180, 180]` grid. The first option, in case you already have the data downloaded, is to assign values to coordinates with the xarray function `assign_coords()`. The code below shifts your longitude coordinates from `[0, 359.75]` to `[-180, 179.75]`.\n",
"\n",
"The second option is to specify the `area` keyword argument right when you request data with the `CDS API`. The `area` keyword then automatically reprojects the requested data onto a [-180, 180] grid."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 10,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"ds_180 = ds.assign_coords(longitude=(((ds.longitude + 180) % 360) - 180)).sortby('longitude')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While an Xarray **dataset** may contain multiple variables, an Xarray **data array** holds a single multi-dimensional variable and its coordinates. To make the processing of the **t2m** data easier, we convert in into an Xarray data array."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 11,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"# Create Xarray Data Array\n",
"da = ds_180['t2m']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's view this data:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 12,
2024-10-18 16:30:09 +02:00
"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",
2024-10-18 16:31:00 +02:00
"html[data-theme=dark],\n",
"body[data-theme=dark],\n",
2024-10-18 16:30:09 +02:00
"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",
2024-10-18 16:31:00 +02:00
" display: block !important;\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
2024-10-18 16:30:09 +02:00
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
2024-10-18 16:31:00 +02:00
" display: inline-block;\n",
" opacity: 0;\n",
2024-10-18 16:30:09 +02:00
"}\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",
2024-10-18 16:31:00 +02:00
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
2024-10-18 16:30:09 +02:00
".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",
2024-10-18 16:31:00 +02:00
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
2024-10-18 16:30:09 +02:00
".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",
2024-10-18 16:31:00 +02:00
".xr-var-data,\n",
".xr-index-data {\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
2024-10-18 16:30:09 +02:00
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
2024-10-18 16:31:00 +02:00
".xr-index-name div,\n",
".xr-index-data,\n",
2024-10-18 16:30:09 +02:00
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
2024-10-18 16:31:00 +02:00
".xr-var-data,\n",
".xr-index-data {\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
2024-10-18 16:30:09 +02:00
" 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",
2024-10-18 16:31:00 +02:00
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray 't2m' (time: 504, latitude: 153, longitude: 261)> Size: 161MB\n",
"[20126232 values with dtype=float64]\n",
2024-10-18 16:30:09 +02:00
"Coordinates:\n",
2024-10-18 16:31:00 +02:00
" * latitude (latitude) float32 612B 72.0 71.75 71.5 71.25 ... 34.5 34.25 34.0\n",
" * time (time) datetime64[ns] 4kB 1979-01-01 1979-02-01 ... 2020-12-01\n",
" * longitude (longitude) float32 1kB -25.0 -24.75 -24.5 ... 39.5 39.75 40.0\n",
2024-10-18 16:30:09 +02:00
"Attributes:\n",
" units: K\n",
2024-10-18 16:31:00 +02:00
" long_name: 2 metre temperature</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'>'t2m'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 504</li><li><span class='xr-has-index'>latitude</span>: 153</li><li><span class='xr-has-index'>longitude</span>: 261</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-30b43ce8-b38c-4449-82c0-f9acad4d7e58' class='xr-array-in' type='checkbox' checked><label for='section-30b43ce8-b38c-4449-82c0-f9acad4d7e58' 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>...</span></div><div class='xr-array-data'><pre>[20126232 values with dtype=float64]</pre></div></div></li><li class='xr-section-item'><input id='section-bf0a81bd-07c7-4459-8985-64f75da78ed8' class='xr-section-summary-in' type='checkbox' checked><label for='section-bf0a81bd-07c7-4459-8985-64f75da78ed8' 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'>latitude</span></div><div class='xr-var-dims'>(latitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>72.0 71.75 71.5 ... 34.5 34.25 34.0</div><input id='attrs-44ddb83b-16b6-4ab1-b96c-69dceed7c299' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-44ddb83b-16b6-4ab1-b96c-69dceed7c299' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a3069e47-3218-4ba6-9229-2bfcbc462504' class='xr-var-data-in' type='checkbox'><label for='data-a3069e47-3218-4ba6-9229-2bfcbc462504' 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>units :</span></dt><dd>degrees_north</dd><dt><span>long_name :</span></dt><dd>latitude</dd></dl></div><div class='xr-var-data'><pre>array([72. , 71.75, 71.5 , 71.25, 71. , 70.75, 70.5 , 70.25, 70. , 69.75,\n",
2024-10-18 16:30:09 +02:00
" 69.5 , 69.25, 69. , 68.75, 68.5 , 68.25, 68. , 67.75, 67.5 , 67.25,\n",
" 67. , 66.75, 66.5 , 66.25, 66. , 65.75, 65.5 , 65.25, 65. , 64.75,\n",
" 64.5 , 64.25, 64. , 63.75, 63.5 , 63.25, 63. , 62.75, 62.5 , 62.25,\n",
" 62. , 61.75, 61.5 , 61.25, 61. , 60.75, 60.5 , 60.25, 60. , 59.75,\n",
" 59.5 , 59.25, 59. , 58.75, 58.5 , 58.25, 58. , 57.75, 57.5 , 57.25,\n",
" 57. , 56.75, 56.5 , 56.25, 56. , 55.75, 55.5 , 55.25, 55. , 54.75,\n",
" 54.5 , 54.25, 54. , 53.75, 53.5 , 53.25, 53. , 52.75, 52.5 , 52.25,\n",
" 52. , 51.75, 51.5 , 51.25, 51. , 50.75, 50.5 , 50.25, 50. , 49.75,\n",
" 49.5 , 49.25, 49. , 48.75, 48.5 , 48.25, 48. , 47.75, 47.5 , 47.25,\n",
" 47. , 46.75, 46.5 , 46.25, 46. , 45.75, 45.5 , 45.25, 45. , 44.75,\n",
" 44.5 , 44.25, 44. , 43.75, 43.5 , 43.25, 43. , 42.75, 42.5 , 42.25,\n",
" 42. , 41.75, 41.5 , 41.25, 41. , 40.75, 40.5 , 40.25, 40. , 39.75,\n",
" 39.5 , 39.25, 39. , 38.75, 38.5 , 38.25, 38. , 37.75, 37.5 , 37.25,\n",
" 37. , 36.75, 36.5 , 36.25, 36. , 35.75, 35.5 , 35.25, 35. , 34.75,\n",
2024-10-18 16:31:00 +02:00
" 34.5 , 34.25, 34. ], 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'>1979-01-01 ... 2020-12-01</div><input id='attrs-4e54e561-abd9-4757-8d7f-124673605ea5' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-4e54e561-abd9-4757-8d7f-124673605ea5' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a3226195-d249-45ea-9b01-4df3963de347' class='xr-var-data-in' type='checkbox'><label for='data-a3226195-d249-45ea-9b01-4df3963de347' 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</dd></dl></div><div class='xr-var-data'><pre>array(['1979-01-01T00:00:00.000000000', '1979-02-01T00:00:00.000000000',\n",
2024-10-18 16:30:09 +02:00
" '1979-03-01T00:00:00.000000000', ..., '2020-10-01T00:00:00.000000000',\n",
" '2020-11-01T00:00:00.000000000', '2020-12-01T00:00:00.000000000'],\n",
2024-10-18 16:31:00 +02:00
" dtype='datetime64[ns]')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>longitude</span></div><div class='xr-var-dims'>(longitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-25.0 -24.75 -24.5 ... 39.75 40.0</div><input id='attrs-4c9ebd25-92e5-4479-b159-825302d01e22' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4c9ebd25-92e5-4479-b159-825302d01e22' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-63ed4da2-c535-4eaf-8ec6-9c834809cc2f' class='xr-var-data-in' type='checkbox'><label for='data-63ed4da2-c535-4eaf-8ec6-9c834809cc2f' 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([-25. , -24.75, -24.5 , ..., 39.5 , 39.75, 40. ], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-e8fb91cb-7f27-4f5b-b59f-8c3bbe90c851' class='xr-section-summary-in' type='checkbox' ><label for='section-e8fb91cb-7f27-4f5b-b59f-8c3bbe90c851' 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>latitude</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-6cc3ec64-1ffc-4bfc-9d0f-b5d980212ed8' class='xr-index-data-in' type='checkbox'/><label for='index-6cc3ec64-1ffc-4bfc-9d0f-b5d980212ed8' 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(Index([ 72.0, 71.75, 71.5, 71.25, 71.0, 70.75, 70.5, 70.25, 70.0, 69.75,\n",
" ...\n",
" 36.25, 36.0, 35.75, 35.5, 35.25, 35.0, 34.75, 34.5, 34.25, 34.0],\n",
" dtype='float32', name='latitude', length=153))</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-8d0f20eb-e276-4d7d-95f1-9e39b1ace797' class='xr-index-data-in' type='checkbox'/><label for='index-8d0f20eb-e276-4d7d-95f1-9e39b1ace797' 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(['1979-01-01', '1979-02-01', '1979-03-01', '1979-04-01',\n",
" '1979-05-01', '1979-06-01', '1979-07-01', '1979-08-01',\n",
" '1979-09-01', '1979-10-01',\n",
" ...\n",
" '2020-03-01', '2020-04-01', '2020-05-01', '2020-06-01',\n",
" '2020-07-01', '2020-08-01', '2020-09-01', '2020-10-01',\n",
" '2020-11-01', '2020-12-01'],\n",
" dtype='datetime64[ns]', name='time', length=504, freq=None))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>longitude</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-396c594a-5dff-45e7-83f4-0c82323d4f4b' class='xr-index-data-in' type='checkbox'/><label for='index-396c594a-5dff-45e7-83f4-0c82323d4f4b' 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(Index([ -25.0, -24.75, -24.5, -24.25, -24.0, -23.75, -23.5, -23.25, -23.0,\n",
" -22.75,\n",
" ...\n",
" 37.75, 38.0, 38.25, 38.5, 38.75, 39.0, 39.25, 39.5, 39.75,\n",
" 40.0],\n",
" dtype='float32', name='longitude', length=261))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-67a49dc1-9275-4df1-8be1-6d33341eae2b' class='xr-section-summary-in' type='checkbox' checked><label for='section-67a49dc1-9275-4df1-8be1-6d33341eae2b' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>K</dd><dt><span>long_name :</span></dt><dd>2 metre temperature</dd></dl></div></li></ul></div></div>"
2024-10-18 16:30:09 +02:00
],
"text/plain": [
2024-10-18 16:31:00 +02:00
"<xarray.DataArray 't2m' (time: 504, latitude: 153, longitude: 261)> Size: 161MB\n",
"[20126232 values with dtype=float64]\n",
2024-10-18 16:30:09 +02:00
"Coordinates:\n",
2024-10-18 16:31:00 +02:00
" * latitude (latitude) float32 612B 72.0 71.75 71.5 71.25 ... 34.5 34.25 34.0\n",
" * time (time) datetime64[ns] 4kB 1979-01-01 1979-02-01 ... 2020-12-01\n",
" * longitude (longitude) float32 1kB -25.0 -24.75 -24.5 ... 39.5 39.75 40.0\n",
2024-10-18 16:30:09 +02:00
"Attributes:\n",
" units: K\n",
" long_name: 2 metre temperature"
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 12,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"da"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Change temperature units from Kelvin to Celsius\n",
"\n",
"Notice that the ERA-5 temperature data are in units of `Kelvin`, the base unit for temperature in the International System of Units (SI). If you want to convert the values from `Kelvin` to `degrees Celsius`, you have to subtract 273.15."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 13,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"da_degc = da - 273.15"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If you inspect the characteristics of the data above, you see that when you convert the data values, the data array's Attributes are dropped. However, we want to keep the information provided by the Attributes and for this reason, we re-assign the attributes from the previous, unconverted object with the function assign_attrs(). Since the unit has changed, we assign a new unit measure to the units attribute."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 14,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"da_degc = da_degc.assign_attrs(da.attrs)\n",
"da_degc.attrs['units'] = '° C'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot data\n",
"\n",
"Now, let us visualize one time step to get a better idea of the data. xarray offers built-in matplotlib functions that allow you to plot a `DataArray`. With the function `plot()`, you can easily plot e.g. the first time step of the loaded array."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 15,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-10-18 16:31:00 +02:00
"<matplotlib.collections.QuadMesh at 0x1263c1340>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 15,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAHHCAYAAABHp6kXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9eZwdRbk+/lR1n3NmJrNkIWSBkET2VRAkAoogS0ABFxQQlC0CIgISFuWH7EhAXOJ1gcsiiJflCqLi9QoIX0R2lAuiogghEAIJS5aZTGbO1lW/P7qr+q0+3ed0nzkzmWTq+XzmMz3VtfVyzlQ97/O+L5NSSlhYWFhYWFhYrOfg63oCFhYWFhYWFhatgF3UWFhYWFhYWGwQsIsaCwsLCwsLiw0CdlFjYWFhYWFhsUHALmosLCwsLCwsNgjYRY2FhYWFhYXFBgG7qLGwsLCwsLDYIGAXNRYWFhYWFhYbBOyixsLCwsLCwmKDgF3UWGzQmDVrFo4//vh1PQ0LCwsLixGAXdRYrPd44okncMkll2D16tXreiojiv7+flx88cU46KCDMHHiRDDGcMsttyTW/9GPfoRtt90WhUIBm2yyCebPn4+1a9cadS655BIwxhJ/Hn/88cx91kOpVMLXv/51TJ8+He3t7ZgzZw7+8Ic/1NR74IEHMG/ePOywww5wHAezZs1KPca6GMvCwmIdQVpYrOe45pprJAC5ePHimnPFYlGWy+WRn9QIYPHixRKA3GyzzeQ+++wjAcibb745tu55550nAcjPfvaz8tprr5Wnn366dF1XHnjggUa9v/71r/LnP/95zc+MGTPkhAkTZKlUytxnPRx11FHSdV15zjnnyP/8z/+Ue+yxh3RdVz766KNGveOOO062tbXJPffcU2666aZy5syZqcdYF2NZWFisG9hFjcV6j3qLmg0ZxWJRLlu2TEop5Z///OfERc1bb70lXdeVX/ziF43yH/7whxKAvPfee+uOs2TJEskYkyeddFLL+pRSyqeffloCkNdcc40uGxwclJtvvrncY489jLpvvvmmXpx+4hOfyLzQGMmxLCws1h2s+clivcYll1yCc889FwAwe/ZsbSZ57bXXANRqam655RYwxvDYY4/hjDPOwOTJkzF+/HiccsopKJfLWL16NY499lhMmDABEyZMwHnnnQcZSWQvhMDChQux/fbbo62tDVOmTMEpp5yCVatWjdRlAwAKhQKmTp3asN6TTz6JarWKo446yihXf9955511299xxx2QUuKYY45pWZ8AcPfdd8NxHJx88sm6rK2tDfPmzcOTTz6JN954Q5dPnz4duVyuYZ+jYSwLC4t1B3ddT8DCYij4zGc+g3//+9+444478P3vfx8bbbQRAGDy5Ml1251++umYOnUqLr30Ujz11FO4/vrrMX78eDzxxBPYbLPNcOWVV+J///d/cc0112CHHXbAscceq9uecsopuOWWW3DCCSfgjDPOwOLFi/GjH/0Izz33HB5//PG6/xBLpRLWrFmT6trUtQwVpVIJANDe3m6Ud3R0AACeffbZuu1vu+02zJgxA3vvvXfL+gSA5557DltttRW6u7uN8t133x0A8Pzzz2PGjBkN+0mDkRzLwsJi3cEuaizWa+y00074wAc+gDvuuAOf+tSnUos6p0yZgv/93/8FYwxf+cpX8Morr+Caa67BKaecgmuvvRYAcPLJJ2PWrFn46U9/qhc1jz32GG688UbcdtttOProo3V/++67Lw466CDcddddRnkUd9xxB0444YRUc4wyRM1i6623BgA8/vjj2HfffXX5o48+CgB48803E9v+4x//wAsvvIDzzjsPjLGW9KmwbNkyTJs2raZclb311lsN+0iLkRzLwsJi3cEuaizGJObNm2f8k54zZw6efPJJzJs3T5c5joPddtvNYB3uuusu9PT04IADDsB7772ny3fddVd0dnbi4YcfrruomTt3bqzHzXDiAx/4AObMmYOrr74am2yyCfbdd1/885//xKmnnopcLofBwcHEtrfddhsAGKanofapMDg4iEKhUFPe1tamz7cKIzmWhYXFuoNd1FiMSWy22WbG3z09PQBQY4Lo6ekxtDIvv/wyent7sfHGG8f2+84779Qdd9q0abGMwXDjl7/8JY488kiceOKJAPwF2/z58/HII4/gpZdeim0jpcTtt9+OHXbYATvttFNTfXqeh3fffddoN3HiROTzebS3t2szFkWxWARQa9pqhJEcy8LCYnTCLmosxiQcx0ldTs1AQghsvPHGmsGIopGWZ3BwEL29vanmmEYEnBabbLIJHnvsMbz88stYvnw5ttxyS0ydOhXTp0/HVlttFdvm8ccfx+uvv44FCxY03ecbb7yB2bNnG+0efvhh7LPPPpg2bVqsmWrZsmUAfMFuFozkWBYWFqMTdlFjsd6DmpGGG5tvvjkefPBB7LXXXk3t7v/7v/97xDU1FFtuuSW23HJLAMCLL76IZcuWJUZcvu2228AYq2tOa9Tn1KlTa8xt73//+wEAO++8Mx5++GH09fUZAt6nn35an8+CkRzLwsJidMIuaizWe4wbNw4ARiSi8BFHHIGf/OQnuPzyy3HllVca56rVKvr7+zF+/PjE9utCUxMHIQTOO+88dHR04Mtf/nLN+Uqlgrvuugsf/vCHa0x1Wfpsa2vD/vvvH1v/s5/9LL7zne/g+uuvxznnnAPA96q6+eabMWfOnMzeSCM5loWFxeiEXdRYrPfYddddAQAXXHABjjrqKORyORx66KF6sdNKfPSjH8Upp5yCBQsW4Pnnn8eBBx6IXC6Hl19+GXfddRd+8IMf4LOf/Wxi+1Zran70ox9h9erV2nvnt7/9LZYuXQrAd1tXWqEzzzwTxWIRO++8MyqVCm6//XY888wz+NnPfha7aLn//vuxYsWKGoEwRdY+o5gzZw4+97nP4fzzz8c777yDLbbYAj/72c/w2muv4aabbjLqvvDCC7j33nsBAK+88gp6e3txxRVXAPDZmEMPPXTUjGVhYbEOsS4j/1lYtAqXX3653GSTTSTn3IguPHPmTHncccfpejfffLMEIP/85z8b7S+++GIJQL777rtG+XHHHSfHjRtXM971118vd911V9ne3i67urrkjjvuKM877zz51ltvtfza6mHmzJkSQOwPjbB88803y/e///1y3LhxsqurS+63337y//2//5fY71FHHSVzuZxcsWJFYp2sfcZhcHBQnnPOOXLq1KmyUCjID37wg/K+++6LHSvpOunzHS1jWVhYrBswKYfBcG9hYWFhYWFhMcKwaRIsLCwsLCwsNgjYRY2FhYWFhYXFBgG7qLGwsLCwsLDYIGAXNRYWFhYWFhYbBOyixsLCwsLCwmKDgF3UWFhYWFhYWGwQ2OCD7wkh8NZbb6Grq2tEw+lbWFhYWKx/kFJizZo1mD59Ojgfvn1/sVhEuVwecj/5fF5nm7cYA4uat956y4ZAt7CwsLDIhDfeeAObbrrpsPRdLBYxqb0TA/CG3NfUqVOxePFiu7AJsMEvarq6ugAA+Z2PRcekTcDzfhJCN98Gxv2MzNzNG20Yq83U7BTa4OZzfn2Hgzv+Cp4zBsZ9BohxBsf1jx2HGXVA6gAA5yFrxBgDIxsC45xqx5gup4yTw5lR34k5pmUuGYeWG32w2t1JtF/jb1bbjzkmi58Xi5+7WTd5DrXzZv69BuDQuZByzsLyHA/Lcw6HE3TlOlzbZXOcI+eo6+BBXQZ1yX7f/jFjAIf6A2E5oMdhCG2+jLRV7QHTJkyfNa2bhLg69RjKNH2ua4gG4UHrxQ9t1LZRPdq3MMqT2ya10edjx5cp6sTPMbayHr+52KpZQrLWu8fGfUqYi3kv/T88YZZF74+QtXUAwEu4917CJOPenYH+NTh23w/o/x3DgXK5jAF4OAabID8EFUgZArctfxPlctkuagJs8Isa9YXOnDyY2wae8x88z7UnL2p47aKG59vBg0WN43Bwt9GiJrkOMMRFTb0FRsNFTf26/nHzi5qkMZPm1Wi+Wa7NWNSw+EUNLU9a1OQcrv/Z+4sapo/9840XNWQday5
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 640x480 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"da_degc[0,:,:].plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An alternative to the built-in xarray plotting functions is to make use of a combination of the plotting libraries [matplotlib](https://matplotlib.org/) and [Cartopy](https://scitools.org.uk/cartopy/docs/latest/). One of Cartopy's key features is its ability to transform array data into different geographic projections. In combination with matplotlib, it is a very powerful way to create high-quality visualisations and animations. In later plots, we will make use of these libraries to produce more customised visualisations."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Calculate climate normals\n",
"\n",
"#### Standard reference period and climate normals\n",
"\n",
"Anthropogenic activities and natural variations from years to decades shape the Earth's climate. In order to evaluate anomalous conditions of a specific month or year, the World Meteorological Organization (WMO) defines `standard reference periods` used to create `climate normals`. `Climate normals` can be considered as the typical climate for the period the normals are based on.\n",
"\n",
"Until 2020, the most current and widely used standard reference period was the 30-year range of 1981-2010. With the start of 2021, the WMO recommended updating the climate normal reference period to the range 1991-2020.\n",
"\n",
"First, let us calculate the near-surface air temperature climate normal for the reference period 1991-2020. For this, we will create for each year the average near-surface air temperature. You can use the xarray function `groupby()` to group the data by year (specify `time.year`) and then to create the average of each year with the function `mean()`. The resulting object contains for each year from 1979 to 2020 the average annual global mean surface air temperature."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 16,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"yearly_mean = da_degc.groupby('time.year').mean(keep_attrs=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From the data array object above, we can then filter the years of the reference period with the function `where()`. Inside the function, you can filter on the data dimensions. In the example below, we will apply a filter to keep data for all years in the range 1980 to 2020."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 17,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n",
"ref = yearly_mean.where((yearly_mean.year > year_lower) & (yearly_mean.year < year_higher), drop=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In a last step, we want to create the average of the yearly-mean near-surface air temperature for the specified reference period. We can do this by applying the function `mean()` and specify the dimension `year` as the dimension to be averaged. The resulting data array is left with two dimensions, latitude and longitude."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 18,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"ref_mean = ref.mean(dim=\"year\", keep_attrs=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Anomaly calculation\n",
"\n",
"The next step is now to calculate the anomaly of a specific year with respect to the climate normal. The term anomaly refers to the deviation of a value from the long-term average. Positive or negative anomalies indicate that the average temperatures of a particular year were respectively warmer or cooler than the reference value.\n",
"\n",
"Let us calculate the near-surface air temperature anomaly for the year 2016. In a first step, we select the average near-surface temperature values for the year 2016 from the xarray.DataArray object `yearly_mean`. With the xarray function `sel()`, you can select a data array based on coordinate labels. The coordinate label of interest is `year=2016`."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 19,
2024-10-18 16:30:09 +02:00
"metadata": {},
2024-10-18 16:31:00 +02:00
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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JDz55JPuGSDpgJWIOd2agtTUVDbIbwaY063lYE43RnPaAMdxTRIt21RcvHixxuiYI0eOEACSyWR07tw5r7zz588nADRjxgy/x6mr002Ky5nRUKebK8rtgw8+aFA59YU53a5srlanm5S6ON1eeuklAkCtW7f2+WXJww8/TADotttuq/NxL126RDzPEwDavn27aN/WrVvd/cjp06e98v70008EgBITE+sV7VYTmzdvdvdtFy9eFO1bsWKFO1JN6rAjuvy+8cQTT4i2FxcXk1KpJAC0ZcsWr3z//Oc/CQD169dPtH3ZsmXu45WUlHjle+uttwgADRw4sB5nev2yfPlyAkDz5s1r6aowGFc9TNPtOmLs2LEYPHgwcnJy8MYbbwScf8+ePbj11luRlJQElUqFsLAwjB49GitXrvSZ/ujRo1i4cCEGDBjg1oIIDw/HiBEj8O233/rMs3HjRnAchyFDhqCqqgrPPvss2rdvD61WW2fdnrVr12L8+PGIjo6GQqFAaGgo0tPTcdttt3npYPjTh3nuuefAcRyee+65GrdfuHAB8+fPR2JiIhQKBebOnesuNzMzEwCQmprq1uJwlWWz2fDf//4Xt956K9q1aweDwQCNRoO2bdvi//7v/5CdnV3jORIRfvjhB4wbNw4xMTFQKpWIiYnBwIED8a9//Qsmk8krT6DXrzbOnz+Pf/3rXxg2bJi7vJCQEAwcOBBLliypUc+nJk03T62dn376CcOGDUNYWFidtHtSUlIwb948AMDnn38u0j0ZMmSIV/rvv/8eN954IyIjI6FUKhEfH4/bbrsNR48e9Urr0lhJSUmBIAh4++230aVLF2i1WsTGxuLuu+9GcXExAKfW1D//+U+0a9cOGo0GcXFxePDBB2E0Gr3K9bSf8+fP4/bbb0dsbCzUajXatGmD5557zuc1dHHy5En89a9/RVpaGtRqNYKDgzFo0KAa9Zw87Xzz5s0YP348IiMjwfO8W8OxoqICH330ESZNmoT09HTodDrodDp07twZTz/9NEpLS0Vluu7VP/74AwAwdOhQUdu7yvW8p2uiJrvw3L506VJkZGQgODjYS5cpOzsbCxYscPcVQUFB6N27N959913Y7fYaj+uLQNvBhacNb9iwAaNGjUJoaCg0Gg169OiB//znPzUes6qqCi+//DJ69OiBoKAgaLVadOzYEX//+99RUlLilb6p7LK+5+6LwYMHg+M4fPXVVzWm+fe//w2O4zBt2jS/5bnal4gAwKetufj6668xfPhwhIWFQaVSITk5GXfccQdOnjxZa9n16X/8kZCQgIiICABOvSFPli9fDgAYMGAAkpOTvfLOmjULAPDLL7/AZrM1qB5NidVqxUcffQSVSoUZM2aI9pWWlkImkyE0NNTrufDtt9+6r6H0OWSxWKDVaqFWq0V9oa9nNsdxeP755wEAzz//vMg25s6d67POgd6jNTF37ly3DR4+fBjTp09HbGwsZDKZaNxgt9vx8ccfY8iQIW67TE1NxT333ONlFy4CGct41uPAgQOYNGkSIiMjodFo0KVLF7z11ltwOBw1nkd9xgd2ux2ffvopRowYgYiICKhUKiQkJGDEiBF455133Onqc31cuPq6zz//HAAwb948UX7p2OzSpUt44IEHkJ6e7n42DhgwAEuWLKn1/BuTXbt
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABN0AAAK+CAYAAACW4mhFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5hU1fn4P/dO353tlaUtHREERDqhCxYUBRHRKKKJMZZvrDFqLEk0GE00JpZoYjQ/E6PRxN4LiB0FwUKR3lnYZevs9Hl/f8zOMHNndmcrK3A+z7MPzD393HPPfe973vMeTUQEhUKhUCgUCoVCoVAoFAqFQtFu6J1dAYVCoVAoFAqFQqFQKBQKheJIQyndFAqFQqFQKBQKhUKhUCgUinZGKd0UCoVCoVAoFAqFQqFQKBSKdkYp3RQKhUKhUCgUCoVCoVAoFIp2RindFAqFQqFQKBQKhUKhUCgUinZGKd0UCoVCoVAoFAqFQqFQKBSKdkYp3RQKhUKhUCgUCoVCoVAoFIp2RindFAqFQqFQKBQKhUKhUCgUinZGKd0UCoVCoVAoFAqFQqFQKBSKdkYp3Y4CSktL0TQNTdN47rnnGo03ffp0NE3jiSeeOHSVO8IREe655x4GDx6Mw+GI3oejlaO9/QrFkcjkyZPRNI2lS5d2eFler5ebbrqJfv36YbPZ0DSN0tLSDi+3KbZv384jjzzCnDlz6NmzJzabDafTydChQ7npppvYv39/k+lra2u56aabGDBgAA6Hg/z8fE499VTee++9RtOsXLmS3//+9yxYsID+/fuj6zqapvHPf/6zWXX2+Xz86U9/YsKECeTm5mK32+nWrRsnn3wyzzzzTIvaH8HlctG9e3eGDh1KKBRqVR6paMtYi8hCW7dubfd6KY5Mli1bxm9/+1vmzp0bJ0t/+OGHKdOuXbuWCy+8kO7du2O1WikqKmLOnDl8/PHHSeNv3bo1mn+qv2XLliWkP3DgADfeeCPHHHMMDoeDnJwcJk6cyJNPPtnq9q9fv54//vGPnHLKKXTt2hWr1UpmZiYjR45k8eLF1NXVNZm+rKyMK664gl69emGz2SgqKmLevHmsXLmyyXQ+n4/f/e53DB06lPT0dHJycpg8eXKT3zAAO3bs4IorrqBPnz7YbDby8/OZOXMmr776aovbfrQzffp0MjMz2bt3b2dXRaE4MhDFEU/Pnj0FEED69+8vfr8/abxp06YJII8//vihreARzIMPPiiAZGVlyZlnnikLFy6UhQsXdna1Oo3IOGxvHn/8cQGO6r7tLCZNmiSALFmypLOrougkDuUYuP766wWQoqIimTdvnixcuFCuvfbaDi+3KcaPHy+AmM1mGTlypMyfP19OPPFEyczMFEAKCgrkyy+/TJq2rKxM+vfvL4B06dJF5s2bJxMnThRN00TTNPnTn/6UNN3s2bOj82ns35NPPpmyvjt27JBBgwYJIPn5+TJr1iyZP3++jBs3TtLS0mTu3Lmt6oebbrpJAHnllVdalb45NDbWbrvtNgHktttuazRtRBbasmVLh9VPkZzm3J+mWLhwYafIp0OHDk36nH3wwQdNpnv55ZfF4XAIIL169ZI5c+bIqFGjRNM00XVd/va3vyWk2b9/f1RGTPY3cuRIASQjI0Pq6uri0m7atCk6vvPy8uTUU0+VqVOnSlpaWlQ2CoVCLW5/165dBRC73S4TJkyQc845R6ZMmSJ2u10A6dOnj2zbti1p2vXr10thYaEA0rt3bzn77LOjbTCbzfK///0vaTqXyyXjxo0TQLKzs2XOnDkyY8YMMZvNAjQ63y9fvlxyc3Ojc+ns2bNlwoQJYrFYBJBbb721xe0/mvn8888FkAsvvLCzq6JQHBEopdtRQORFHHn5Pvzww0njKaVb+xP5QHjrrbc6uyrfC9auXStr165t93yV0q3zUEo3xaEcA5H32XfffdfhZTWXs88+W+677z4pLy+Pu75v3z6ZPHmyANKvXz8JBAIJaSPKs2nTponL5Ypef/XVV8VkMomu67J69eqEdIsXL5abbrpJnnvuOdm0aVP0HqRSutXX18vAgQMFkNtvv118Pl9cuMvlalRB2BQ7d+4Um80mI0eObHHalrBt2zZZu3ZtXF+JKKXb953DVel23XXXye233y4vvfSS7Ny5MzqGmlK67d27VzIyMgSQq6++Ou65f/3118Vms4nZbJY1a9a0qC4nn3yyAPLjH/84IWzUqFECyOTJk+XAgQPR6xs2bJA+ffoIII8++miLyhMRmTp1qjz22GNSW1sbd33Lli1y7LHHCiBTpkxJSBcKhWT48OECyPnnnx/XB4888ogA4nQ6Zc+ePQlpf/aznwkgQ4YMkf3790evf/HFF+J0OgWQl19+OS6N2+2W7t27CyDz58+X+vr6aNjy5cslLy9PyeKtYNasWaJpmqxataqzq6JQHPYopdtRQERIuPHGG6MrQEaBVUQp3TqCXr16KSH/EKCUbp2HUropDuUY0DStQ6xlO4odO3Y0ah3z7bffCiAmk0m2bt2akPbiiy8WQM4555yU5TRX6XbLLbcIIJdccknLGpKCiJXbX/7yl3bNt7kopdv3m8NV6WakOUq33/72twJI3759k+4sufrqqwWQH/7wh80ud+fOnaLrugDy6aefxoV9/PHH0Xlk48aNCWlffPFFAaR79+6tsnZrjA8++CA6t+3YsSMu7NVXX41aqhkVdiIHvzd+8YtfxF0/cOCAWK1WAeTDDz9MSPeb3/xGABkzZkzc9aeeeipaXmVlZUK6+++/XwCZMGFCK1p69PL8888LIIsWLersqigUhz2Hj+SqaDWxQkJEML/jjjsS4qVSun3xxRdy7rnnSvfu3cVqtUpOTo7MmDFDXn311aTxv/32W7n11ltl3LhxUlJSIhaLRXJzc2XatGnyzDPPJE2zZMkSAWTSpEnicrnklltukYEDB4rD4ZCePXs2q71vv/22zJo1SwoLC8VsNkt2drb07dtXzjvvPHn//ffj4qb6WGxMUIy9vm3bNrnoooukW7duYjabZeHChdF8k/1F8vL5fPLkk0/KueeeKwMGDJCMjAyx2+3Sv39/ufLKK2XXrl2NtjEUCsl///tfOfXUU6WoqEgsFosUFRXJ+PHj5a677opb5YvQ0vvXFFu3bpW77rpLpkyZEs0vKytLxo8fL3/5y18kGAwmTdfY9tLYj6EXXnhBpkyZIjk5Oc36kI/dPm38mzRpUkL8Z599VmbOnCn5+flisVikpKREzjvvPPn2228T4m7ZskUA6dmzpwSDQbn//vtlyJAh4nA4pLi4WH7yk59IRUWFiIh4PB759a9/LQMGDBC73S5dunSR//u//0vYBiISP362bt0q559/vhQXF4vNZpN+/frJbbfdlvQeRli/fr1ccskl0rt3b7HZbJKZmSk/+MEPGv3gjh3ny5Ytk1mzZkl+fr5omhZ93mtqauTRRx+VM888U/r27StpaWmSlpYmgwcPlptuuilBkI08q439RfKNfaYbo7FxEXv973//u4wZMya6ZS/2w3nXrl1y9dVXR+cKp9MpJ5xwgvz5z39udDt9Y7S0HyLEjuH33ntPTjzxRMnOzha73S7Dhw+Xf/zjH42W6XK5ZPHixTJ8+HBxOp3icDhk0KBBcvPNN8dZLUToqHHZ2rYnm0cnTpwogDz11FONtvt3v/udADJv3rxG40Ro6jk3vrP+/e9/y9SpUyUnJ0esVqv06NFDFi1aJOvXr28y79bMP80hPz8/aV/ccccdAsjEiROTpnv33XcFkPT09ASLNCPNUbr5fL5oXTZs2NDyhjSC1+uVgoICsdlsUlVVFRdWWVkpuq5LdnZ2wnvhmWeeid5D43vI4/GIw+EQm80WNxcmG2tNzUOxCzFteUYbI1YZ9PXXX8vZZ58txcXFout6nNzg9/vlr3/9q0yaNCk6LktLS+XSSy+V7du3J827JbJMbD1WrVolZ555puTn54vdbpchQ4bIH//4x6SWlhFaIx/4/X557LHHZNq0aZKXlydWq1W6du0q06ZNi9sW3dz7k4zIXJdKnoqwY8cOueKKK6R
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABN0AAAK+CAYAAACW4mhFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU1frHvzPbS3olPYTeOwSQDhFEqnQRETvwUyxXxauoVwW7XhUrolfFgooVFOkqVZp0KaGn92yybeb9/bHZZWd2k91NFTif58kDO6efOXPKe97zHo6ICAwGg8FgMBgMBoPBYDAYDAaj3uCbOgMMBoPBYDAYDAaDwWAwGAzGlQYTujEYDAaDwWAwGAwGg8FgMBj1DBO6MRgMBoPBYDAYDAaDwWAwGPUME7oxGAwGg8FgMBgMBoPBYDAY9QwTujEYDAaDwWAwGAwGg8FgMBj1DBO6MRgMBoPBYDAYDAaDwWAwGPUME7oxGAwGg8FgMBgMBoPBYDAY9QwTujEYDAaDwWAwGAwGg8FgMBj1DBO6MRgMBoPBYDAYDAaDwWAwGPUME7pdBaSkpIDjOHAch6+++qpaf8OGDQPHcfjwww8bL3NXOESEF154AR06dIBOp3O9h6uVq738DMaVyKBBg8BxHDZt2tTgaVksFixcuBAtW7aERqMBx3FISUlp8HRr4uzZs3jnnXcwYcIEJCcnQ6PRwGg0onPnzli4cCHy8vJqDF9WVoaFCxeidevW0Ol0iIyMxHXXXYcNGzZUG2bPnj148cUXMW3aNLRq1Qo8z4PjOHzyySd+5XfevHmu9LRaLVJTUzFr1izs378/4PI7MZlMSExMROfOnSGKYq3jqYm6tDXnXOj06dP1ni/GlcmWLVvw7LPPYuLEiZK59O+//+4z7JEjR3DzzTcjMTERarUaMTExmDBhArZu3erV/+nTp13x+/rbsmWLR/jCwkI88sgjaNu2LXQ6HcLCwjBgwAB8/PHHtS7/sWPH8Oqrr2LUqFGIj4+HWq1GcHAwevbsicWLF6O8vLzG8Dk5OZg3bx5SU1Oh0WgQExODSZMmYc+ePTWGs1qteO6559C5c2cYDAaEhYVh0KBBNa5hAODcuXOYN28e0tLSoNFoEBkZiYyMDPz0008Bl/1qZ9iwYQgODkZ2dnZTZ4XBuDIgxhVPcnIyASAA1KpVK7LZbF79DR06lADQ8uXLGzeDVzBvvvkmAaCQkBAaP348zZo1i2bNmtXU2WoynO2wvlm+fDkBuKrrtqkYOHAgAaCNGzc2dVYYTURjtoEHH3yQAFBMTAxNmjSJZs2aRffff3+Dp1sT/fr1IwCkVCqpZ8+eNGXKFBo+fDgFBwcTAIqKiqK9e/d6DZuTk0OtWrUiANSsWTOaNGkSDRgwgDiOI47j6L///a/XcGPHjnX1p+5/H3/8cY153b59OwUFBREAio+PpzFjxtD48eMpNTXVVYYvv/yyVvWwcOFCAkA//vhjrcL7Q3VtbdGiRQSAFi1aVG1Y51woMzOzwfLH8I4/76cmZs2a1STz086dO3v9zn777bcaw/3www+k0+kIAKWmptKECROoV69exHEc8TxP77//vkeYvLw81xzR21/Pnj0JAAUFBVF5ebkk7MmTJ13tOyIigq677joaMmQI6fV619xIFMWAyx8fH08ASKvVUv/+/Wnq1Kk0ePBg0mq1BIDS0tLozJkzXsMeO3aMoqOjCQA1b96cJk+e7CqDUqmkb775xms4k8lEffv2JQAUGhpKEyZMoBEjRpBSqSQA1fb3O3fupPDwcFdfOnbsWOrfvz+pVCoCQI8//njA5b+a2bVrFwGgm2++uamzwmBcETCh21WAcyB2Dr5vvfWWV39M6Fb/OBcIa9eubeqs/CM4cuQIHTlypN7jZUK3poMJ3RiN2Qac49nff//d4Gn5y+TJk+mVV16h/Px8yfPc3FwaNGgQAaCWLVuS3W73COsUng0dOpRMJpPr+U8//UQKhYJ4nqf9+/d7hFu8eDEtXLiQvvrqKzp58qTrHfgSunXq1IkA0O23305Wq9X1XBAE+ve//+1a6FZWVgZUB+fPnyeNRkM9e/YMKFygnDlzho4cOSKpKyImdPunc7kK3R544AF64okn6Pvvv6fz58+72lBNQrfs7GyXYHvBggWS737NmjWk0WhIqVTS4cOHA8rLyJEjCQDddtttHm69evUiADRo0CAqLCx0PT9+/DilpaURAHr33XcDSo+IaMiQIbRs2TIqKyuTPM/MzKT27dsTABo8eLBHOFEUqWvXrgSAZs6cKamDd955hwCQ0WikrKwsj7D33HMPAaCOHTtSXl6e6/mff/5JRqORANAPP/wgCVNZWUmJiYkEgKZMmUIVFRUut507d1JERASbi9eC0aNHE8dxtG/fvqbOCoNx2cOEblcBzknCI4884toBkk9YiZjQrSFwag+wSX7DwoRuTQcTujEasw1wHNcg2rINxblz56rVjjl06BABIIVCQadPn/YIO2fOHAJAU6dO9ZmOP0K3/Px8V15yc3M93O12u0s7Z8+ePX6U7hJOLbe33347oHD1BRO6/bO5XIVucvwRuj377LMEgFq0aOH1ZMmCBQsIAN14441+p3v+/HnieZ4A0Pbt2yVuW7dudfUjJ06c8Aj73XffEQBKTEyslbZbdfz222+u/uTcuXMSt59++sklwJcL7IgurTcefvhhyfPCwkJSq9UEgH7//XePcP/5z38IAPXp00fyfMWKFa70ioqKPMK99tprBID69+9fi5JevaxatYoA0OzZs5s6KwzGZc/lM3Nl1Br3SYJzYv700097+PMldPvzzz9p+vTplJiYSGq1msLCwmjEiBH0008/efV/6NAhevzxx6lv374UFxdHKpWKwsPDaejQofTFF194DbNx40YCQAMHDiSTyUSPPfYYtWnThnQ6HSUnJ/tV3l9//ZVGjx5N0dHRpFQqKTQ0lFq0aEEzZsygzZs3S/z6WixWN1F0f37mzBm65ZZbKCEhgZRKJc2aNcsVr7c/Z1xWq5U+/vhjmj59OrVu3ZqCgoJIq9VSq1ataP78+XThwoVqyyiKIn399dd03XXXUUxMDKlUKoqJiaF+/frRkiVLJLt8TgJ9fzVx+vRpWrJkCQ0ePNgVX0hICPXr14/efvttEgTBa7jqjpe6L4a+/fZbGjx4MIWFhfm1kHc/Pi3/GzhwoIf/lStXUkZGBkVGRpJKpaK4uDiaMWMGHTp0yMNvZmYmAaDk5GQSBIFee+016tixI+l0OoqNjaU77riDCgoKiIjIbDbTU089Ra1btyatVkvNmjWj//u///M4BkIkbT+nT5+mmTNnUmxsLGk0GmrZsiUtWrTI6zt0cuzYMbr99tupefPmpNFoKDg4mK655ppqF9zu7XzLli00evRoioyMJI7jXN97aWkpvfvuuzR+/Hhq0aIF6fV60uv11KFDB1q4cKHHRNb5rVb354zX/ZuujurahfvzDz74gPr06eM6sue+cL5w4QItWLDA1VcYjUbq0aMHvf7669Uep6+OQOvBiXsb3rBhAw0fPpxCQ0NJq9VS165d6aOPPqo2TZPJRIsXL6auXbuS0WgknU5H7dq1o0cffVSiteCkodplbcvurR8dMGAAAaAVK1ZUW+7nnnuOANCkSZOq9eOkpu9cPmZ99tlnNGTIEAoLCyO1Wk1JSUk0e/ZsOnbsWI1x16b/8YfIyEivdfH0008TABowYIDXcOvXrycAZDAYJFpp3vBH6FZWVua30O3s2bN+lMyBxWKhqKgo0mg0VFxcLHErKioinucpNDTUY1z44osvXPmRj0Nms5l0Oh1pNBpJX+itrdXUD7lvxNTlG60Od2HQgQMHaPLkyRQbG0s8z0vmDTabjd577z0aOHCgq12mpKTQnXfeWW1dBzKXcc/Hvn37aPz48RQZGUlarZY6duxIr776qldNSye1mR/YbDZatmwZDR06lCIiIkitVlN8fDwNHTpUciza3/fjDWdf52s+5eTcuXM0b948atGihWts7Nu3L7399ts1lt9f/BG6jR8/ngDQnDlzvLo7BVJBQUF+j0/
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
2024-10-18 16:30:09 +02:00
"source": [
"\n",
"\n",
"while y2c < y2f:\n",
" t2m_y2c = yearly_mean.sel(year=y2c)\n",
"\n",
" # Next, we calculate the near-surface air temperature anomaly for y2c by subtracting the climate normal \n",
" # (i.e. the reference near-surface air temperature values) from the average near-surface air temperature for 2016.\n",
" \n",
" anom_y2c = t2m_y2c - ref_mean\n",
" \n",
" # create the figure panel and the map using the Cartopy PlateCarree projection\n",
" fig, ax = plt.subplots(1, 1, figsize = (16, 8), subplot_kw={'projection': ccrs.PlateCarree()})\n",
"\n",
" # Plot the data\n",
" im = plt.pcolormesh(anom_y2c.longitude, anom_y2c.latitude, anom_y2c, cmap='RdBu_r', vmin=-3, vmax=3) \n",
"\n",
" # Set the figure title, add lat/lon grid and coastlines\n",
" ax.set_title('Near-surface air temperature anomaly for ' + str(y2c) + ' (with respect to ' + str(year_lower) + '-' + str(year_higher) + ' mean)', fontsize=16)\n",
" ax.gridlines(draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--') \n",
" ax.coastlines(color='black')\n",
" ax.set_extent([-25, 40, 34, 72], crs=ccrs.PlateCarree())\n",
"\n",
" # Specify the colourbar\n",
" cbar = plt.colorbar(im,fraction=0.05, pad=0.04)\n",
" cbar.set_label('temperature anomaly') \n",
"\n",
" # Save the figure\n",
" fig.savefig(f'{DATADIR}ERA5_global_' + str(y2c) +'_anomaly_eur.png')\n",
" \n",
" # loop to next year\n",
" y2c = y2c + 1\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's visualize the global near-surface air temperature anomaly for 2016 to see which regions were warmer or cooler compared to the reference period. This time we will make use of a combination of the plotting libraries [matplotlib](https://matplotlib.org/) and [Cartopy](https://scitools.org.uk/cartopy/docs/latest/) to create a more customised figure. One of Cartopy's key features is its ability to transform array data into different geographic projections. In combination with matplotlib, it is a very powerful way to create high-quality visualisations and animations."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Calculate monthly climatology and anomalies\n",
"\n",
"We will now calculate the monthly climatology of near-surface air temperature for the period 1991 to 2020. We will also view the anomalies with respect to the climatology for a particular month. To do this, we return to the data array created at the end of [section 1](#search_download).\n",
"\n",
"We first create again a temporal subset for the period 1991 to 2020, but this time keeping the monthly temporal resolution."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 20,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"clim_period = da_degc.sel(time=slice('1991-01-01', '2020-12-01'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will now calculate the monthly climatology by first applying the function `groupby()` to group the data array by month and then calculating the average for each monthly group. The resulting data array is the monthly climatology for air temperature in Europe based on the reference period 1991 to 2020."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 21,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"clim_month = clim_period.groupby('time.month').mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us view this monthly climatology averaged over the entire European region. To do this we need to average over the latitude and longitude dimensions. A very important consideration however is that the gridded data cells do not all correspond to the same areas. The size covered by each data point varies as a function of latitude. We need to take this into account when averaging. One way to do this is to use the cosine of the latitude as a proxy for the varying sizes.\n",
"\n",
"First, we calculate the weights by using the cosine of the latitude, then we apply these weights to the data array with the xarray function `weighted()`."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 22,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"weights = np.cos(np.deg2rad(clim_month.latitude))\n",
"weights.name = \"weights\"\n",
"clim_month_weighted = clim_month.weighted(weights)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The next step is to compute the mean across the latitude and longitude dimensions of the weighted data array with the function `mean()`."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 23,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"mean = clim_month_weighted.mean([\"longitude\", \"latitude\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This data array now gives us the monthly climatology of Europe for the period 1991 to 2020. We could create a simple plot of this:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 24,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-10-18 16:31:00 +02:00
"[<matplotlib.lines.Line2D at 0x167ef3620>]"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 24,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 640x480 with 1 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"mean.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One more step we can take is to repeat the process above for the standard deviation, to enable us to plot both in a single figure."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 25,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"clim_std = clim_period.groupby('time.month').std()\n",
"\n",
"weights = np.cos(np.deg2rad(clim_std.latitude))\n",
"weights.name = \"weights\"\n",
"clim_std_weighted = clim_std.weighted(weights)\n",
"\n",
"std = clim_std_weighted.mean([\"longitude\", \"latitude\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now plot the European monthly climatology and standard deviation in a figure:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 26,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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c46dox+N13v27Nk4//zzkZaWBq1Wix49euCjjz6K2IbjOLjdbixatCj8GtY8j99//x2XX345TCYTDAYD+vbt2+BpL0uXLkWPHj2g1WqRnp6OG264AUePHq1zuzPPPBMajQadOnXCp59+irFjx6JVq1YAAMYYWrVqhaFDh9Z6rs/ng9lsxvjx4497LqFQCM8880w47lu1aoVHH30Ufr8/4rVYuHAh3G53+LU43l3hSy+9tFbb1VdfDQDYsWNHuK3m797cuXPDQ/379++Pw4cPgzGGZ555Bvn5+dBqtRg6dCgqKyuP25+xY8di7ty54fOu/qkmSRJeeukldOzYERqNBllZWRg/fjysVmvEflq1aoUrr7wS33zzDc4++2xotVp07tw5fD385JNP0Llz5/B16vfff691HgaDAfv27cOAAQOg1+uRm5uLp59+ulY8Nvacvvzyy/A5vfHGGwCAhQsXok+fPsjMzIRarcaZZ56J119/vdbz//rrL3z77bfh16X6vaqrPgZQd62O452HzWbD5MmTw9eytm3bYubMmZAk6XhvG4Cqa5JKpcLFF18c0a5Wq5GdnX3C52/atAmhUAgjR46MaK/+d807zd999x26d+8ecd3S6XQYMmQIfvvtN+zevTvcnpWVBa1We8Lj10Wu60jr1q3RsmXLWse66qqr4Pf7sW/fvnD7Rx99BEEQcPvtt4fbNBoNxo0bh02bNuHw4cMAgPT0dHTs2LHWser63V2+fDmCwSAmTJgQcfw777wTR44cwaZNmyL20a9fPxw8eBBbtmw5Yd8IIQ2jiPcJEEISl91uR3l5eUQbx3FIS0s7qf2FQiEMGDAAF154IWbPng2dTgfGGIYMGYL169dj3Lhx6NatG7788ks8+OCDOHr0KP773/9G7OPbb7/Fhx9+iLvvvhtqtRqvvfYaBg4ciM2bN6NTp04AgJKSEpx33nnhpDcjIwNffPEFxo0bB4fDgcmTJwMAHA4H3nzzTYwaNQq33XYbnE4n3nrrLQwYMACbN2+uVUxsyZIlcDqdGD9+PDiOwwsvvIBrrrkG+/btg1KpPGH/J02ahOzsbEybNg0//vgj5s+fD4vFgo0bN6JFixaYPn06Vq1ahVmzZqFTp04YM2YMADT6Nfr+++/xySefYMKECTAajXjllVcwbNgwHDp0CGlpabjmmmvw999/4/3338d///tfpKenAwAyMjIavI+63HjjjXj33Xfx5Zdf4sorrwy3FxcX4+uvv65zuGhNa9euxZVXXomcnBzcc889yM7Oxo4dO7BixQrcc889J3x9o/V6A8DLL7+MIUOGYPTo0QgEAvjggw9w3XXXYcWKFRg0aBAA4H//+x9uvfVWnHvuueE/kE877TQAwF9//YWLLroIJpMJU6ZMgVKpxBtvvIFLL70U3377LXr27Fnveb/zzju4+eabcc4552DGjBkoKSnByy+/jB9++AG///47LBYLAGDlypUYMWIEOnfujBkzZsBqtWLcuHHIy8sL74vjONxwww144YUXUFlZidTU1PBjn3/+ORwOB2644Ybjvo633norFi1ahGuvvRb3338/fvrpJ8yYMQM7duzAp59+Gn4t5s+fj82bN+PNN98EAJx//vkNfasAIDw/tzoea1q8eDECgQAmTZqEyspKvPDCCxg+fDj69Om
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1200x600 with 1 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1, figsize = (12, 6))\n",
"\n",
"ax.plot(mean.month, mean, color='blue', label='mean')\n",
"ax.fill_between(mean.month, (mean + std), (mean - std), alpha=0.1, color='green', label='+/- 1 SD')\n",
"\n",
"ax.set_title('European monthly climatology of 2m temperature (1991 to 2020)')\n",
"ax.set_ylabel('° C')\n",
"ax.set_xlabel('month')\n",
"ax.set_xlim(1,12)\n",
"handles, labels = ax.get_legend_handles_labels()\n",
"ax.legend(handles, labels)\n",
"ax.grid(linestyle='--')\n",
"\n",
"fig.savefig(f'{DATADIR}Eur_monthly_t2m_clim.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Calculate monthly anomalies\n",
"\n",
"We will now inspect monthly anomalies with respect to this climatology. We will return to the data that we created prior to aggregating by latitude and longitude. We can compute the monthly anomalies for each month of our original European time series by subtracting from it the monthly climatology. Important to mention here is to first group by `time.month`. In this way, xarray understands to use the correct value of the monthly climatology to calculate the anomalies."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 27,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"anom_month = da_degc.groupby('time.month') - clim_month"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Visualise Europen near-surface temperature anomalies for each specific month\n",
"\n",
"The last step is to visualize the air temperature anomaly field in Europe for each month. In Europe, 2020 was the hottest year on record and the northwest has expierenced a heatwave during the second half of July and first half of August. Let us select the air temperature anomalies for August for each year from 1979 to 2020. Through the grouping process, the data array `anom_month` has `month` as additional coordinate information. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let us visualise the near-surface air temperature anomaly for Europe in 2020 per month. Again we make use of the function `visualize_pcolormesh`."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 29,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABN0AAAK+CAYAAACW4mhFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5gUxdbG304TN+ddYAlLRnKQBQTJiIBIkCQicK8J8Jqu6apg+jBfs6LXrIiiYsSEBFEQJUnOaYFNLBtnJ/f5/pidZron7WxgCfV7nn1gukJXV1dXV506/RZHRAQGg8FgMBgMBoPBYDAYDAaDUWfwDV0ABoPBYDAYDAaDwWAwGAwG40KDGd0YDAaDwWAwGAwGg8FgMBiMOoYZ3RgMBoPBYDAYDAaDwWAwGIw6hhndGAwGg8FgMBgMBoPBYDAYjDqGGd0YDAaDwWAwGAwGg8FgMBiMOoYZ3RgMBoPBYDAYDAaDwWAwGIw6hhndGAwGg8FgMBgMBoPBYDAYjDqGGd0YDAaDwWAwGAwGg8FgMBiMOoYZ3RgMBoPBYDAYDAaDwWAwGIw6JmKjW7NmzcBxHDiOw2effRY03pAhQ8BxHN59993alI/hAxHh6aefxiWXXAKj0ajch4uVi/36GYwLkcsvvxwcx2H16tX1fi673Y77778frVq1gl6vB8dxaNasWb2flwG8++674DgO119/fZ3mu3nzZjzzzDOYMmUKWrduDZ7nwXEcPvzwwxrlJ8sy1q1bh4ceegj9+vVDYmIiJElCUlIShg4dio8++ghEFDKPTZs2YeLEiUhNTYXBYEDz5s0xb948FBQUBIx/7NgxLFq0COPGjUPTpk2h1+sRFRWFzp074/7770dhYWHI85WXl+P+++9HmzZtYDQakZSUhCuvvBIrV66sUR142bJlCwRBwLx582qVTyhq+l4/cuQIe34ZEeF2u/HZZ5/hvvvuw7Bhw5CYmAiO4yCKYrXS//jjjxg5ciSSkpKg1+vRrFkz3HTTTTh+/HjIdBs2bMCECROQlpYGnU6HRo0a4dprr8WuXbuCpqnrfg1gfVsgOnfuDI7joNfrUVRUVCd5nqsE62vP5hjsXMRr5zhy5EhDFyUi3G432rZti6ZNm8JqtTZ0cRiBoAhp2rQpASAA1Lp1a3I6nQHjDR48mADQO++8E+kpGEF45ZVXCADFxsbS1VdfTTNmzKAZM2Y0dLEaDG87rGveeecdAnBR121DMWDAAAJAq1atauiiMBqIs9kG/v3vfxMASk1NpYkTJ9KMGTPozjvvrPfzXgyE65/rq5+96qqrlHP7/n3wwQc1ym///v1KHgkJCTRs2DCaNGkS9ezZUzk+atQostvtAdMvXbqURFEkANSzZ0+65pprqEWLFkq7279/v1+avn37EgASRZF69uxJkyZNoqFDh1JMTAwBoOTkZNqyZUvA8+Xn51Pr1q0JAKWnp9PEiROpf//+xHEccRxHL774Yo3qwVsus9lM+fn5Nc4jHMHaTbh+4fDhwwSAmjZtWm9lYwSntv22d25x+PDhOi1XKIqLiwP2FYIghE37wAMPKPG7detG48ePV567uLg42rx5c8B0ixYtIkEQCAC1a9eOxo8fT506dSIApNfr6fvvvw+Yrq77NSLWt2n5888/VXX7/PPP1yq/c52a9rXnAqtWrSIANGDAgDrPuyH6orpi6dKlBIAWLFjQ0EVhBKDGRjeTyUQA6LXXXgsYjxnd6h5vR/jTTz81dFHOCXbv3k27d++u83yZ0a3hOB9e9oz65Wy2Ae/7bN++ffV+rouNhjK6LVy4kO6//3767LPP6ODBg0p7qunk9MCBAzRo0CD6/vvvyeVyqcJWr15NZrOZANDDDz/sl/bEiRPKWGnRokXKcZfLRddee60yWZVlWZXummuuof/+97906tQp1fGCggK6/PLLCQC1atXKrzxEZybngwcPJovFohz/7rvvSBAE4nme/v7774jrwTuY//e//x1x2kgI9l5nRrdzm/PR6FZRUUHTpk2jZ555hlauXElbt26tltHtu+++IwDE8zwtXbpUOS7LMi1YsIAAUPPmzclms6nS/f3334rB7bnnnlOFvf3228qiemFhod8567pfI2J9m5Ybb7yRAFCjRo0IAHXs2LHGeZ0PBHtHHz16lHbv3q2q43MNZnQLTseOHcloNFJubm5DF4WhocZGt/vuu09ZbQj0YDKjW93TvHnz87ojOF9gRreGgxndGGezDXAcVy/esoyGM7ppqYvJaSgeffRRAkBZWVl+YV5PyiFDhviFlZeXU2xsLAGgH374odrny8nJUep27dq1qrCdO3cqRoMjR474pZ09ezYBoMmTJ1f7fF769OlDAGjPnj0Rp60LmNHt3OZ8NLpp8bahcEa3YcOGBe27ZFmmbt26EQD63//+pwq74YYbQhoKrr76agJADzzwQNiy1ne/RnTx9G1ERBaLRfG2W7lyJUVFRREA+vPPP2uU3/lAuHf0uQwzugXnv//9b1BjOaNhqfFGCiNHjsSAAQOQm5uL//73vxGn37RpE6ZNm4bMzEzo9XokJCRg+PDhWL58ecD4u3btwvz589G3b180atQIOp0OiYmJGDJkCD799NOAaVavXg2O43D55ZejsrISDz30ENq1aweTyVRt3Y8VK1Zg9OjRSE1NhSRJiI+PR6tWrXDttdfi119/VcUN9x38ggULwHEcFixYEPT4sWPHMHv2bDRp0gSSJOH6669X8j18+DAAoHnz5sq3+N68nE4nPvzwQ0ybNg1t27ZFTEwMjEYj2rRpg1tvvRUnT54Meo1EhC+++AKjRo1SNCbS0tLQr18/PPnkkwG/DY/0/oXi6NGjePLJJzFo0CAlv7i4OPTr1w+LFi2CLMsB0wXTI/D9Hv+rr77CoEGDkJCQUC2NgmbNmmHmzJkAgPfee085h7cdafnss88wYsQIJCcnh9Xm8NWckWUZL774Ijp16gSTyYT09HTcdNNNOH36NACP1tSjjz6Ktm3bwmg0IiMjA//6179gsVj88vVtP0ePHsV1112H9PR0GAwGtG7dGgsWLAj5ff++fftw4403IisrCwaDAbGxsejfv39QrRDfdr527VqMHj0aycnJ4Hle0XAsLy/Hm2++iXHjxqFVq1Ywm80wm83o2LEj/vOf/6CkpESVp/dZXbNmDQBg4MCBqrr35uv7TAcjWLvwPf7OO+8gOzsbsbGxftoNJ0+exB133KH0FdHR0ejZsydefvlluFyuoOcNRKT14MW3Da9atQrDhg1DfHw8jEYjunXrhvfffz/oOSsrK/HEE0+gW7duiI6OhslkQocOHfDAAw+guLjYL359tcuaXnsgBgwYAI7j8PHHHweN89RTT4HjOFxzzTVh8/PWL1Xp1QRqa16WLFmCwYMHIyEhAXq9Hk2bNsWsWbOwb9++kHnXpP8B1M/zyZMn8Y9//AMZGRkwGo245JJL8NZbbylx9+zZg6lTpyItLQ0GgwGdO3fGJ598EjTv06dP4/7770eHDh2Utt29e3c89dRTAfsI3+fN6XTiySefRIcOHWA0GpGYmIhx48Zh9+7dAcvvxbdug+mkWCwW3HfffWjZsiX0ej3S0tIwY8YMnDhxImx9NTRdu3YFAOTk5PiFLVu2DAAwdepUv7CoqCiMGTMGAPDFF19U+3yNGzdGUlJSwHN6z9e3b180bdrUL623HN988w2cTme1z7llyxasW7cOvXv3Rps2bVRhX3/9NTiOU67Fl1tuuQUcx0GSJJSVlanCfv31V3Ach/79+6uOa/vv6r4bfCEivPHGG+jevTvMZjNiY2MxbNgwrF+/vtrX7KW6z3NxcTHmz5+PLl26KP1ux44d8dhjj6GystIvX1mW8cYbb6Bv376Ii4uDJElISUlB586dMW/ePL/nxLccy5YtQ79+/RATE4Po6GhcfvnlYcdekYxVfK/pkUceQY8ePRAbGwuj0YgWLVrgmmuuwffffw+gZvfHF6+249GjRwGox7eB+sw///wT11xzDTIyMqDT6ZCSkoLRo0fj559/DnmeuuSvv/4C4NGu1sJxHAYPHgwAfrr
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABN0AAAK+CAYAAACW4mhFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5wV1fn/P9Nu3b13e2PZXVh679KUDhZApBcVkcQYQaPGJOrXQoz5WWNiLAkmtsSOSmzYBUVRFATpvcP2vndvn+f3x9073Jm5Ze8WVuC8X699wdxT5syZM2fOec4zn8MREYHBYDAYDAaDwWAwGAwGg8FgtBp8exeAwWAwGAwGg8FgMBgMBoPBONdgRjcGg8FgMBgMBoPBYDAYDAajlWFGNwaDwWAwGAwGg8FgMBgMBqOVYUY3BoPBYDAYDAaDwWAwGAwGo5VhRjcGg8FgMBgMBoPBYDAYDAajlWFGNwaDwWAwGAwGg8FgMBgMBqOVYUY3BoPBYDAYDAaDwWAwGAwGo5VhRjcGg8FgMBgMBoPBYDAYDAajlWFGNwaDwWAwGAwGg8FgMBgMBqOVidvoVlBQAI7jwHEc3nzzzYjxJk6cCI7j8MILL7SkfIwQiAiPPPII+vTpA7PZrNyH85Xz/foZjHORsWPHguM4rFu3rs3P5Xa7ceedd6Jr164wGo3gOA4FBQVtfl4G8MILL4DjOFxzzTWtlmdDQwPef/99LF++HP3790diYiIMBgM6duyI+fPn45tvvok7T1mWsWHDBtxzzz0YPXo0UlNTIUkS0tLSMGnSJLz88ssgoqh5bN68GXPmzEFmZiZMJhM6deqEG2+8EaWlpWHjHzt2DCtXrsTMmTORn58Po9GIhIQE9O/fH3feeSfKysqinq+urg533nknunfvDrPZjLS0NFx22WX44osv4r7+ULZs2QJBEHDjjTe2KJ9oNPe9fuTIEfb8MuLC7/fjzTffxB133IHJkycjNTUVHMdBFMUmpf/4449x6aWXIi0tDUajEQUFBbj++utx4sSJqOk2btyI2bNnIysrCwaDAR06dMCVV16JXbt2RUzz448/4tFHH8WCBQvQrVs38DwPjuPw0ksvxXXNobC+TU///v3BcRyMRiMqKipaJc+fK5H62jM5Bvs5ErRzHDlypL2LEhd+vx89evRAfn4+nE5nexeHEQ6Kk/z8fAJAAKhbt27k9XrDxpswYQIBoOeffz7eUzAi8NRTTxEAstvtdMUVV9DixYtp8eLF7V2sdiPYDlub559/ngCc13XbXowZM4YA0Nq1a9u7KIx24ky2gd/97ncEgDIzM2nOnDm0ePFi+u1vf9vm5z0fiNU/t0U/+69//Us5b35+Pl1++eU0a9Ys6tKlCwEgjuPo/vvvjyvP/fv3K3mmpKTQ5MmTad68eTR06FDl96lTp5Lb7Q6bftWqVSSKIgGgoUOH0ty5c6lz585Ku9u/f78uzahRowgAiaJIQ4cOpXnz5tGkSZPIZrMRAEpPT6ctW7aEPV9JSQl169aNAFB2djbNmTOHLrroIuI4jjiOo7///e9xXb+2XFarlUpKSpqdRywitZtY/cLhw4eV+84487S03w7OLQ4fPtyq5YpGVVWV0t5C/wRBiJn2rrvuUuIPGjSIZs2apTx3SUlJ9OOPP4ZNt3LlShIEgQBQz549adasWdSvXz8CQEajkT788MOw6S6//PKwZf3vf//b7OtnfZua77//XlW3f/vb31qU38+d5va1PwfWrl1LAGjMmDGtnnd79EWtxapVqwgArVixor2LwghDs41uFouFANA//vGPsPGY0a31CXaEn3zySXsX5WfB7t27affu3a2eLzO6tR9nw8ue0bacyTYQfJ/t27evzc91vtEeRrcXXniBrr32Wt2EV5Zl+stf/qKUad26dU3O88CBAzR+/Hj68MMPyefzqcLWrVtHVquVANAf//hHXdqTJ08qY6WVK1cqv/t8PrryyiuVyaosy6p0c+fOpb/+9a9UXl6u+r20tJTGjh1LAKhr16668hCdnpxPmDCBHA6H8vsHH3xAgiAQz/P0008/Nfn6gwQH87/73e/iThsPkd7rzOj28+ZsNLrV19fTokWL6NFHH6UvvviCtm7d2iSj2wcffEAAiOd5WrVqlfK7LMu0YsUKAkCdOnUil8ulSvfTTz8pBrfHHntMFfbcc88pi+plZWW6cz7wwAN055130ptvvkkHDx5U6rslRjfWt6n51a9+RQCoQ4cOBID69u3b7LzOBiK9o48ePUq7d+9W1fHPDWZ0i0zfvn3JbDZTUVFRexeFoaHZRrc77rhDWW0I92Ayo1vr06lTp7O6IzhbYEa39oMZ3Rhnsg1wHNcm3rKM9jG6xSI4Llm6dGmr5fmnP/2JAFBhYaEuLOhJOXHiRF1YXV0d2e12AkAfffRRk893/PhxpW7Xr1+vCtu5c6diNDhy5Igu7dKlSwkAzZ8/v8nnCzJy5EgCQHv27Ik7bWvAjG4/b85Go5uWYBuKZXSbPHlyxL5LlmUaNGgQAaB///vfqrDrrrsuqqHgiiuuIAB01113xSxraxjdYnG+9G1ERA6HQ/G2++KLLyghIYEA0Pfff9+s/M4GYr2jf84wo1tk/vrXv0Y0ljPal2ZvpHDppZdizJgxKCoqwl//+te402/evBmLFi1CXl4ejEYjUlJSMGXKFKxZsyZs/F27duHee+/FqFGj0KFDBxgMBqSmpmLixIl44403wqZZt24dOI7D2LFj0dDQgHvuuQc9e/aExWJpsu7HZ599hmnTpiEzMxOSJCE5ORldu3bFlVdeia+++koVN9Z38CtWrADHcVixYkXE348dO4alS5eiY8eOkCQJ11xzjZLv4cOHAQCdOnVSvsUP5uX1evHSSy9h0aJF6NGjB2w2G8xmM7p3746bbroJp06diniNRIS3334bU6dOVTQmsrKyMHr0aDz00ENhvw2P9/5F4+jRo3jooYcwfvx4Jb+kpCSMHj0aK1euhCzLYdNF0iMI/R7/nXfewfjx45GSktIkjYKCggIsWbIEAPDiiy8q5wi2Iy1vvvkmLr74YqSnp8fU5gjVnJFlGX//+9/Rr18/WCwWZGdn4/rrr0dlZSWAgNbUn/70J/To0QNmsxk5OTn4zW9+A4fDocs3tP0cPXoUV199NbKzs2EymdCtWzesWLEi6vf9+/btw69+9SsUFhbCZDLBbrfjoosuiqgVEtrO169fj2nTpiE9PR08zysajnV1dfjXv/6FmTNnomvXrrBarbBarejbty/+7//+D9XV1ao8g8/ql19+CQAYN26cqu6D+YY+05GI1C5Cf3/++ecxYsQI2O12nXbDqVOncOuttyp9RWJiIoYOHYonn3wSPp8v4nnDEW89BAltw2vXrsXkyZORnJwMs9mMQYMG4T//+U/EczY0NODBBx/EoEGDkJiYCIvFgt69e+Ouu+5CVVWVLn5btcvmXns4xowZA47j8Oqrr0aM8/DDD4PjOMydOzdmfsH6pUa9mnBtLchrr72GCRMmICUlBUajEfn5+bj22muxb9++qHk3p/8B1M/zqVOn8Itf/AI5OTkwm83o06cPnn32WSXunj17sHDhQmRlZcFkMqF///54/fXXI+ZdWVmJO++8E71791ba9uDBg/Hwww+H7SNCnzev14uHHnoIvXv3htlsRmpqKmbOnIndu3eHLX+Q0LqNpJPicDhwxx13oEuXLjAajcjKysLixYtx8uTJmPUVDwMHDgQAHD9+/IzkuXr1agDAwoULdWEJCQmYPn06AODtt99u8vlyc3ORlpYW9pzB840aNQr5+fm6tMFyvPfee/B6vU0+55YtW7BhwwYMHz4c3bt3V4W9++674DhOuZZQbrjhBnAcB0mSUFtbqwr76quvwHEcLrroItXv2v67qe+GUIgIzzzzDAYPHgyr1Qq73Y7Jkyfj22+/bfI1B2nq81xVVYV7770XAwYMUPrdvn374v7770dDQ4MuX1mW8cwzz2DUqFFISkqCJEnIyMhA//79ceONN+qek9ByrF69GqNHj4bNZkNiYiLGjh0bc+wVz1gl9Jr
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABN0AAAK+CAYAAACW4mhFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3wUxfvHP3u9pPcCKdRQQm8BpBdBQKQ3qXbAgtj4SrH9sPcGilgRQURFURAhSkcQkN5LgBBCSL3k+vP743JLdvZyl0oo83698oLbKTs7Ozvl2Wc/IxARgcPhcDgcDofD4XA4HA6Hw+FUGYqaLgCHw+FwOBwOh8PhcDgcDodzs8GNbhwOh8PhcDgcDofD4XA4HE4Vw41uHA6Hw+FwOBwOh8PhcDgcThXDjW4cDofD4XA4HA6Hw+FwOBxOFcONbhwOh8PhcDgcDofD4XA4HE4Vw41uHA6Hw+FwOBwOh8PhcDgcThXDjW4cDofD4XA4HA6Hw+FwOBxOFcONbhwOh8PhcDgcDofD4XA4HE4Vw41uHA6Hw+FwOBwOh8PhcDgcThVTbqNbQkICBEGAIAj4/vvvS43Xq1cvCIKAzz//vDLl45SAiPDaa6+hadOm0Ov14n24VbnVr5/DuRnp1q0bBEFAampqtZ/LYrFg1qxZqF+/PrRaLQRBQEJCQrWflwN8/vnnEAQBEydOrLI8U1NTxXHB19/Zs2fLlKfT6cSWLVswZ84cdO7cGaGhoVCr1QgLC0Pv3r3xzTffgIi85rFr1y4MHz4ckZGR0Ol0SExMxPTp03Hp0iWP8c+ePYsFCxZgyJAhiI+Ph1arhZ+fH5o3b45Zs2YhMzPT6/ny8/Mxa9YsNGzYEHq9HmFhYbjjjjuwfv36Ml1zaezevRtKpRLTp0+vVD7eqOi4fvr0af78csqFw+HA999/j2eeeQZ9+vRBaGgoBEGASqUqU/o1a9agf//+CAsLg1arRUJCAh544AGcO3fOa7rt27dj2LBhiIqKgkajQWxsLMaNG4eDBw+Wmubff//F66+/jtGjR6NBgwZQKBQQBAFff/11ua65JLxvk9O8eXMIggCtVousrKwqyfN6pbS+9lrOwa5H3HaO06dP13RRyoXD4UBSUhLi4+NRVFRU08XheILKSXx8PAEgANSgQQOy2Wwe4/Xs2ZMA0OLFi8t7Ck4pfPDBBwSAAgMD6a677qIJEybQhAkTarpYNYa7HVY1ixcvJgC3dN3WFF27diUAtGHDhpouCqeGuJZt4IknniAAFBkZScOHD6cJEybQ448/Xu3nvRXw1T9XRz976NAhcVz09NeoUSMCQHXr1iWn01mmPI8dOyZeS0hICPXp04dGjhxJbdu2FY8PGDCALBaLx/TLly8nlUpFAKht27Y0YsQIqlOnjtjujh07JkvTqVMnAkAqlYratm1LI0eOpN69e1NAQAABoPDwcNq9e7fH82VkZFCDBg0IAEVHR9Pw4cOpS5cuJAgCCYJA7777bpnr01O5jEYjZWRkVDgPX5TWbnz1C6dOnSIAFB8fX21l45ROZftt99ri1KlTVVoub2RnZ4vtreSfUqn0mfbZZ58V47dq1YqGDh0qPndBQUH077//eky3YMECUiqVBIAaNWpEQ4cOpWbNmhEA0mq19Ntvv3lMd+edd3os61dffVXh6+d9m5QdO3ZI6vbtt9+uVH7XOxXta68HNmzYQACoa9euVZ53TfRFVcXy5csJAM2bN6+mi8LxQIWNbgaDgQDQRx995DEeN7pVPe6OcO3atTVdlOuCQ4cO0aFDh6o8X250qzluhMGeU71cyzbgHs+OHj1a7ee61agJo5sv3Ea3l156qcxpjh8/Tj169KDffvuN7Ha7JCw1NZWMRiMBoOeee06W9vz58+JcacGCBeJxu91O48aNExerrAFwxIgR9NZbb9Hly5clxy9dukTdunUjAFS/fn1ZeYiuLs579uxJJpNJPP7rr7+SUqkkhUJBe/fuLfP1u3FP5p944olypy0PpY3r3Oh2fXMjGt0KCgpo7Nix9Prrr9P69etpz549ZTK6/frrrwSAFAoFLV++XDzudDpp3rx5BIASExPJbDZL0u3du1c0uL355puSsM8++0x8qZ6ZmSk75/z582nWrFn0/fff04kTJ8T6rozRjfdtUu6//34CQLGxsQSAkpOTK5zXjUBpY/SZM2fo0KFDkjq+3uBGt9JJTk4mvV5P6enpNV0UDkOFjW7PPPOM+LbB04PJjW5VT2Ji4g3dEdwocKNbzcGNbpxr2QYEQagWb1nO9Wd027Jli7igPn/+fJXl+8ILL4jecyxuT8pevXrJwvLz8ykwMJAA0O+//17m86WlpYl1u3HjRknYgQMHxGs8ffq0LO2UKVMIAI0aNarM53PTsWNHAkCHDx8ud9qqgBvdrm9uRKMbi7sN+TK69enTp9S+y+l0UqtWrQgAffrpp5Kw++67z6uh4K677iIA9Oyzz/osa1UY3Xxxq/RtREQmk0n0tlu/fj35+fkRANqxY0eF8rsR8DVGX89wo1vpvPXWW6Uayzk1S4U3Uujfvz+6du2K9PR0vPXWW+VOv2vXLowdOxZxcXHQarUICQlB3759sXr1ao/xDx48iLlz56JTp06IjY2FRqNBaGgoevXqhWXLlnlM49Z36datGwoLCzFnzhw0atQIBoOhzLof69atw8CBAxEZGQm1Wo3g4GDUr18f48aNw99//y2J6+s7+Hnz5kEQBMybN6/U42fPnsWUKVNQu3ZtqNVqTJw4Ucz31KlTAIDExETxW3x3XjabDV9//TXGjh2LpKQkBAQEQK/Xo2HDhnj44Ydx4cKFUq+RiPDDDz9gwIABosZEVFQUOnfujFdeecXjt+HlvX/eOHPmDF555RX06NFDzC8oKAidO3fGggUL4HQ6PaYrTY+g5Pf4P/30E3r06IGQkJAyaRQkJCRg0qRJAIAvvvhCogHUrVs3Wfzvv/8et99+O8LDw31qc5TUnHE6nXj33XfRrFkzGAwGREdH44EHHsCVK1cAuLSmXnjhBSQlJUGv1yMmJgaPPPIITCaTLN+S7efMmTMYP348oqOjodPp0KBBA8ybN8/r9/1Hjx7F/fffj7p160Kn0yEwMBBdunQpVSukZDvfuHEjBg4ciPDwcCgUClHDMT8/H5988gmGDBmC+vXrw2g0wmg0Ijk5Gf/73/+Qk5MjydP9rP71118AgO7du0vq3p1vyWe6NEprFyWPL168GCkpKQgMDJRpN1y4cAEzZswQ+wp/f3+0bdsW77//Pux2e6nn9UR568FNyTa8YcMG9OnTB8HBwdDr9WjVqhW+/PLLUs9ZWFiIl19+Ga1atYK/vz8MBgOaNGmCZ599FtnZ2bL41dUuK3rtnujatSsEQcC3335bapxXX30VgiBgxIgRPvNz1y8V69V4amtuli5dip49eyIkJARarRbx8fGYPHkyjh496jXvivQ/gPR5vnDhAu655x7ExMRAr9ejadOmWLRokRj38OHDGDNmDKKioqDT6dC8eXN89913peZ95coVzJo1C02aNBHbduvWrfHqq6967CNKPm82mw2vvPIKmjRpAr1ej9DQUAwZMgSHDh3yWH43rJaaJ50Uk8mEZ555BvXq1YNWq0VUVBQmTJiA8+fP+6yvsvLZZ58BAG6//XbExMRUWb4tW7YEAKSlpcnCVq5cCQAYM2aMLMzPzw+DBg0CAPzwww9lPl+tWrUQFhbm8Zzu83Xq1Anx8fGytO5yrFq1Cjabrczn3L17N7Zs2YIOHTqgYcOGkrCff/4ZgiCI11KShx56CIIgQK1WIy8vTxL2999/QxAEdOnSRXKc7b/LOjaUhIiwcOFCtG7dGkajEYGBgejTpw+2bt1a5mt2U9bnOTs7G3PnzkWLFi3Efjc5ORkvvvgiCgsLZfk6nU4sXLgQnTp1QlBQENRqNSIiItC8eXNMnz5d9pyULMfKlSvRuXNnBAQEwN/fH926dfM59yrPXKXkNT3//PNo06YNAgMDodfrUadOHYwYMQK//fYbgIrdn5K4tR3PnDkDQDq/9dRn7tixAyNGjEBMTAw
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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hYXDYenWrZsA8vDDD9c7P4/HE5vUm+ti//79YrfbBZCPP/44Ie7//d//CSDDhw9P4wojnHfeeQLI22+/nXbcpkAZ5I5ufqgGOTP1MchdcsklAsiYMWOShk+ePFkA+c1vfhN3/Pe//70A0qVLl6Srkq655hoB5IILLkhZzubu10SOnb4tSteuXQWQZ555Rjp16iSAPPvssw1O72inNoPcDwFlkKudl156qVZDuqL5afCmDqeeeipjxoxh586d/PnPf047/uLFizn//PMpKSnB4XCQn5/PpEmTePPNN5Oe//3333PrrbcyatQo2rRpg91up0WLFowfP55nn302aZyFCxeiaRonnngiVVVV3HLLLfTs2RO3211vnaD58+dzxhlnxGkkdO3alQsuuIAPP/ww7txU68dvu+02NE3jtttuq/X4li1bmDt3Lu3atcNmszF79uxYuhs3bgSgY8eOMa2CaFrBYJD//Oc/nH/++fTo0YPs7GxcLhfdu3fnyiuvZMeOHbVeo4jw4osvcvrpp8c0LVq1asXo0aP5wx/+gNfrTYiT7v2ri82bN/OHP/yBsWPHxtLLzc1l9OjRPPLIIxiGkTRebbovNfUNXnnlFcaOHUt+fn691vZ36NCBOXPmAPCvf/0rlke0HZl5/vnnOfnkkyksLEypBbJp06aYRpVhGPztb3+jX79+uN1uWrduzc9//nP2798PRLSt/u///o8ePXrgcrkoLi7mqquuwuPxJKRbs/1s3ryZiy66iNatW+N0OunWrRu33XZb0nsYZc2aNfzsZz+jc+fOOJ1OcnJyOOGEE2rVXKrZzj/66CPOOOMMCgsL0XU9ph1RUVHBP/7xD6ZMmULXrl3JyMggIyODvn378utf/5qysrK4NKPP6qJFiwA46aST4uo+mm7NZ7o2amsXNY8/8cQTjBgxgpycnAQtjB07dnDttdfG+oqsrCyGDBnC/fffTygUqjXfZKRbD1FqtuEFCxYwceJE8vLycLlcDBo0iCeffLLWPKuqqrjrrrsYNGgQWVlZuN1uevfuzW9+8xsOHDiQcH5ztcuGXnsyxowZg6Zp/Pe//631nLvvvhtN0zj33HNTphetXxEBSNrWojzzzDOMGzeO/Px8HA4H7du35+KLL2bNmjV1pt2Q/gfin+cdO3bwk5/8hOLiYlwuF3369OGxxx6Lnbtq1SrOO+88WrVqhdPppH///vzvf/+rNe39+/dz00030bt371jbHjx4MHfffXfSPqLm8xYMBvnDH/5A7969cblctGjRgilTprBy5cqk5Y9Ss25r0/jyeDzceOONdOnSBYfDQatWrZg1axbbt29PWV8/VAYOHAiA1+tl3759cWEvvfQSADNmzEDX44dpuq4zffp0AF588cV65+d2u+nevTsAW7dujQt78803CQQClJSUMGrUqIS45513HgCff/55nWMJM7t37+b555+nuLiYCRMmxIUtW7YMTdPo169fQrzos6xpWsK7dMuWLWiaRklJSdxxs65RtF/717/+BcCcOXPi2qF5HBblhRdeYPTo0WRnZ5ORkcGoUaMaNK6pz3sSIvf/T3/6E8OHDyc3Nxen00n37t355S9/SWlpadK0n3vuOcaPH0+LFi2w2Wy0aNGCXr168dOf/pRly5bVWo5FixYxceJE8vPzcbvdDB0
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1600x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"cumc = 1\n",
"while cumc <= 12:\n",
" \n",
" anom_aug = anom_month[anom_month.month == cumc]\n",
"\n",
" fig, ax = plt.subplots(1, 1, figsize = (16, 8), subplot_kw={'projection': ccrs.PlateCarree()})\n",
"\n",
" im = plt.pcolormesh(anom_aug.longitude, anom_aug.latitude, anom_aug[41,:,:], cmap='RdBu_r', vmin=-3, vmax=3) \n",
"\n",
2024-10-18 16:31:00 +02:00
" ax.set_title('Near-surface air temperature anomaly for month ' + str(cumc) +' 2020 (with respect to 1991-2020 Aug climatology)', fontsize=16)\n",
2024-10-18 16:30:09 +02:00
" ax.gridlines(draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--') \n",
" ax.coastlines(color='black')\n",
" ax.set_extent([-25, 40, 34, 72], crs=ccrs.PlateCarree())\n",
"\n",
" cbar = plt.colorbar(im,fraction=0.05, pad=0.04)\n",
" cbar.set_label('temperature anomaly') \n",
"\n",
" fig.savefig(f'{DATADIR}ERA5_Europe_2020-' + str(cumc) +'_anomaly.png')\n",
" \n",
" cumc = cumc + 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. Time series analysis\n",
"\n",
"In this section we focus on time series analysis, where we will plot and analyse changes in near-surface air temperature over time. We focus on another subset area over the Arctic, where increasing temperatures are particularly apparent.\n",
"\n",
"We will download another subset of the dataset [ERA5 monthly averaged data on single levels from 1979 to present](https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels-monthly-means?tab=overview), this time for the Arctic."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 30,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
2024-10-18 16:31:00 +02:00
"2024-10-18 15:58:01,596 WARNING [2024-10-10T00:00:00] The final validated ERA5 differs from ERA5T in July 2024 - please refer to our\n",
"[Forum announcement](https://forum.ecmwf.int/t/final-validated-era5-product-to-differ-from-era5t-in-july-2024/6685)\n",
"for details and watch it for further updates on this.\n",
"2024-10-18 15:58:01,598 INFO Request ID is 51236a00-98d5-49c3-85ba-c2a3854d33b5\n",
"2024-10-18 15:58:01,913 INFO status has been updated to accepted\n",
"2024-10-18 15:58:06,182 INFO status has been updated to running\n",
"2024-10-18 15:58:09,634 INFO status has been updated to successful\n",
" \r"
2024-10-18 16:30:09 +02:00
]
},
{
"data": {
"text/plain": [
2024-10-18 16:31:00 +02:00
"'./dataDir/1729266924/era5_monthly_t2m_Arc.nc'"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 30,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.retrieve(\n",
" 'reanalysis-era5-single-levels-monthly-means',\n",
" {\n",
" 'product_type': 'monthly_averaged_reanalysis',\n",
" 'variable': '2m_temperature',\n",
" 'year': [\n",
" '1979', '1980', '1981',\n",
" '1982', '1983', '1984',\n",
" '1985', '1986', '1987',\n",
" '1988', '1989', '1990',\n",
" '1991', '1992', '1993',\n",
" '1994', '1995', '1996',\n",
" '1997', '1998', '1999',\n",
" '2000', '2001', '2002',\n",
" '2003', '2004', '2005',\n",
" '2006', '2007', '2008',\n",
" '2009', '2010', '2011',\n",
" '2012', '2013', '2014',\n",
" '2015', '2016', '2017',\n",
" '2018', '2019', '2020',\n",
" ],\n",
" 'month': [\n",
" '01', '02', '03',\n",
" '04', '05', '06',\n",
" '07', '08', '09',\n",
" '10', '11', '12',\n",
" ],\n",
" 'time': '00:00',\n",
" 'area': [\n",
" 90, -180, 66.55,\n",
" 180,\n",
" ],\n",
2024-10-18 16:31:00 +02:00
" 'data_format': 'netcdf_legacy',\n",
2024-10-18 16:30:09 +02:00
" },\n",
" f'{DATADIR}era5_monthly_t2m_Arc.nc')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will repeat the steps in [section 1](#search_download) to read the data into an xarray data array:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 31,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"Arc_file = f'{DATADIR}era5_monthly_t2m_Arc.nc'\n",
"Arc_ds = xr.open_dataset(Arc_file)\n",
"Arc_da = Arc_ds['t2m']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will also repeat the steps in [section 1](#search_download) to convert the values from degrees Kelvin to Celsius:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 32,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"Arc = Arc_da - 273.15\n",
"\n",
"Arc = Arc.assign_attrs(Arc_da.attrs)\n",
"Arc.attrs['units'] = '° C'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's view the first time step of this data. Notice that we change the projection from `ccrs.PlateCarree()` to `ccrs.Orthographic(central_latitude=90)` to better view the Arctic region. Note that we need to insert a `transform` keyword in the `pcolormesh` function to transform the data values into the orthographic projection:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 33,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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Hj2aBx54gCuvvJLMzMwmrffvf/+bG2+8EU3TGDJkCKNGjWLHjh0sWLCAuXPncvfdd5sRFIMHH3yQZ599lr59+zJw4EAyMjLMfMLPP/+c77//ngcffDDu9urr6xk3bhyrV6/mmGOOYfDgwZSWljbazxdffNEUZyNHjuTYY4+lrq6OoqIi/ve//5GVlRX3y39PWbduHUOHDsXlcjFmzBiEEGRlZdG3b1+6devGW2+9RU1NDZMnTyYlJQWAIUOGAPpj2Ysuuoj09HQKCgoYNGgQNTU1LFu2jEcffZT//e9/fPfdd/Ts2TNim4FAgHPPPZd33nkHWZYZOXIk48ePp6SkhNWrV3PLLbcwZcqUiBuYPTl/DfHSSy9xxx130L17d3r37s2YMWPYvn07Cxcu5Ntvv2Xu3Lm89dZbzS7g/Ne//sVjjz3GiBEjOPHEE9m2bRuKojS4ztlnn83333/Pt99+S48ePTjqqKPMedZofDAY5IILLuCNN97A7XYzfPhw8vPzWbt2La+88grvvPMO77zzDieeeGLc7Vx44YW89957jB07lh49evDdd9/x5JNPsmjRIr7++mtOPPFEfv75Z8aNG0evXr34+uuveeSRR1i3bl1CQbFx40aGDx+Ow+HgmGOOoa6ujvnz53P33Xczb9485s2bh8fjiVjnzTff5OKLL6a+vp6+ffty8sknU1FRwQ8//MBFF13EF198wXPPPRd3e2+++SZPPPEEffv25fjjj6esrAy32w3A8uXLmT59OtnZ2fTp04fhw4eze/duFi9ezN/+9jfeeOMNvv/+e/M7wxCMn3zyCcXFxUycOJEOHTqY24q+bveGa6+9llmzZnHkkUdyyimn8Ouvv5rX1ldffcUZZ5zB7t276datGyeccAI+n49FixZx7bXXmnnITqezxfoTj9tuu4358+fTv39/hg8fTnJyMhs2bODDDz/kww8/5OGHHzafUkZTUVHBkUceyebNmzn66KMZMGAACxcu5L///S9ffvkly5cvJz09vVX7X11dDZDwNyErKwvQgwFLlizh5JNPbrRN4zq88MILzessensZGRnIcvyYX1ZWFrt27WLx4sVMmTKlaTtiY3OwI2wOWLp27SoA8fXXXwshhDjrrLMEIG644YaI5Y477jgBiOeffz5i+ieffCIkSRJZWVniyy+/jJj3888/i06dOglALFiwIGLeggULxIYNG2L6U1hYaK7zww8/RMybP3++AAQgBg0aJLZv396sfe3evXvEvlopLi4WS5YsiZg2duxYAYj58+fHbe/OO+8UgLjzzjvjTgfEhRdeKOrr6+Oubxz7jRs3xsyrrKwU77//vvD5fBHT/X6/uPXWWwUgTj755Jj1brzxRgGIbt26iWXLlkXM0zRNzJs3T5SXl5vT9vT8NcSiRYvEihUrYqZv3bpVDB48WADijTfeiJlvHLNojOOkKIp4//33m9wPg+eff14A4pJLLkm4zG233SYAMWrUKPHrr79GzHvzzTeFoiiiXbt2Yvfu3eb0jRs3mn3u0aOH+O2338x5JSUlolevXgIQAwcOFCNHjhQlJSXm/F9//VW0a9dOAOKbb76J2J71+jn99NNFbW2tOW/Lli2id+/eAhC33HJLxHo///yzcLvdwuPxiLfffjti3m+//SYGDhwoAPHiiy9GzDO
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 800x800 with 2 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1, figsize = (8, 8), subplot_kw={'projection': ccrs.Orthographic(central_latitude=90)})\n",
"\n",
"im = ax.pcolormesh(Arc.longitude, Arc.latitude, Arc[0,:,:], transform = ccrs.PlateCarree(), cmap='coolwarm')\n",
"ax.gridlines(draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--')\n",
"ax.set_title('Near-surface air temperature, Jan 1979', fontsize=16)\n",
"ax.coastlines(color='black')\n",
"\n",
"cbar = fig.colorbar(im, fraction=0.04, pad=0.07)\n",
"cbar.set_label('° C')\n",
"\n",
"fig.savefig(f'{DATADIR}ERA5_Arctic_t2m_Jan1979.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Aggregate over geographical lat/lon dimensions\n",
"\n",
"We would like to analyse the time series of near-surface air temperature aggregated over the Arctic. To do this we need to average over the latitude and longitude dimensions. As before, we will need to take into account the varying size of the gridded data cells as a function of latitude."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 34,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"weights = np.cos(np.deg2rad(Arc.latitude))\n",
"weights.name = \"weights\"\n",
"Arc_weighted = Arc.weighted(weights)\n",
"Arc_mean = Arc_weighted.mean([\"longitude\", \"latitude\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us create a simple plot of this data to see how it looks:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 35,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-10-18 16:31:00 +02:00
"[<matplotlib.lines.Line2D at 0x167f8c500>]"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 35,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAGwCAYAAACpYG+ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9eZxtR3Ufiq8zdPe9V8PVdCUxCITEFIkZG5nJQRiDHGIb52ecZ2I/RIhsYxxsBI6lxGZysHiA+QTzCMaxAeXZecJJeHY8YSaF2GGKDYrBtsDCgIRmIXTn293nnP37Y5/atdaqNVXf7j532OvzuZ++fbpO7aq9a1d967u+a9WgaZoGeuutt95666233k4CGy66Ab311ltvvfXWW2/bZT3w6a233nrrrbfeThrrgU9vvfXWW2+99XbSWA98euutt9566623k8Z64NNbb7311ltvvZ001gOf3nrrrbfeeuvtpLEe+PTWW2+99dZbbyeNjRfdgGPNZrMZ3HHHHXDaaafBYDBYdHN666233nrrrbeANU0D+/fvhwc/+MEwHOq8Tg98mN1xxx1wwQUXLLoZvfXWW2+99dbbBuy2226Dhz70oerfe+DD7LTTTgOA9sadfvrpC25Nb7311ltvvfUWsX379sEFF1zQreOa9cCHWXJvnX766T3w6a233nrrrbfjzDyZSi9u7q233nrrrbfeThrrgU9vvfXWW2+99XbSWA98euutt9566623k8Z64NNbb7311ltvvZ001gOf3nrrrbfeeuvtpLEe+PTWW2+99dZbbyeN9cCnt95666233no7aawHPr311ltvvfXW20ljPfDprbfeeuutt95OGuuBT2+99dZbb731dtJYD3x666233nrrrbeTxnrg01tvvfXWW2+9nTR2QgGfN7zhDTAYDMi/xz72sYtuVm+99dZbb71tmh1emy66Cce1nVDABwDg0ksvhTvvvLP79+d//ueLblJvvfXWW2+9bYr99me+Af/gdR+GD3/prkU35bi1Ew74jMdjOP/887t/55xzzqKb1FtvvfXWW2+bYr/4e18CAIBX/M5fLrglvv3v2x6AH/+tz8Lf3rlv0U0hdsIBn7/7u7+DBz/4wXDRRRfBP/tn/wxuvfVWs/zq6irs27eP/Outt9566+3ksT/54p3wD992I3zxm3sX3ZSwNc2iW+Dble//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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 640x480 with 1 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"Arc_mean.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that the `plot()` function now creates a 2 dimensional graph of temperature as a function of time.\n",
"\n",
"The trend in rising temperatures in the past decades is particularly noticable in the Arctic, and it is much easier to see this if we view the time series of yearly averages."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 36,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"Arc_yearly = Arc_mean.groupby('time.year').mean()"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 37,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-10-18 16:31:00 +02:00
"[<matplotlib.lines.Line2D at 0x127cf2fc0>]"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 37,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 640x480 with 1 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"Arc_yearly.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we can see a clear warming trend."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A typical way to view such a time series is to convert the absolute temperature values into anomalies with respect to a climate normal and view the time series as a bar chart. This can clearly highlight which years were on average warmer or cooler than the climate normal."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To do this, we calculate the anomalies with respect to a climate normal:"
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 38,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"Arc_subset = Arc_yearly.where((Arc_yearly.year > 1990) & (Arc_yearly.year < 2021), drop=True)\n",
"Arc_clim = Arc_subset.mean()\n",
"Arc_anom = Arc_yearly - Arc_clim"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will now create a bar chart to visualize the time series of anomalies. We want to apply the color blue for years that are cooler than the reference period (negative anomalies) and the color red for years that are warmer than the reference period. For this, the next step is to convert the `xarray.DataArray` object into a `pandas.DataFrame` with the function `to_dataframe()`. Let us add an additional column called `positive`, indicating with a boolean value whether the air temperature anomaly is positive (`True`) or negative (`False`). The result is a data frame with 42 rows (one row per year) and two columns (`t2m`, `positive`)."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 39,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>t2m</th>\n",
" <th>positive</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1979</th>\n",
2024-10-18 16:31:00 +02:00
" <td>-1.990015</td>\n",
2024-10-18 16:30:09 +02:00
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1980</th>\n",
2024-10-18 16:31:00 +02:00
" <td>-1.263199</td>\n",
2024-10-18 16:30:09 +02:00
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1981</th>\n",
2024-10-18 16:31:00 +02:00
" <td>-0.570732</td>\n",
2024-10-18 16:30:09 +02:00
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1982</th>\n",
2024-10-18 16:31:00 +02:00
" <td>-1.707722</td>\n",
2024-10-18 16:30:09 +02:00
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1983</th>\n",
2024-10-18 16:31:00 +02:00
" <td>-1.338904</td>\n",
2024-10-18 16:30:09 +02:00
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" t2m positive\n",
"year \n",
2024-10-18 16:31:00 +02:00
"1979 -1.990015 False\n",
"1980 -1.263199 False\n",
"1981 -0.570732 False\n",
"1982 -1.707722 False\n",
"1983 -1.338904 False"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"execution_count": 39,
2024-10-18 16:30:09 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = Arc_anom.to_dataframe()\n",
"df['positive'] = df['t2m'] > 0\n",
"df.head() # show only first five rows"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `pandas.DataFrame` can then be visualized with the pandas built-in `plot()` function. You can customize the plot with the following keyword arguments:\n",
"* `figsize`: Define the size of the plot\n",
"* `kind`: Type of plot, e.g. `line`, `bar`, etc.\n",
"* `color`: color of the bars. With `df.positive.map()`, the colum `positive` is used to distinguish between bars that shall be colored in blue and bar that shall be colored in red\n",
"* `fontsize`: fontsize for x- and yticks\n",
"* `xlabel`, `ylabel`: Labels for x and y axes\n",
"* `title`: Title of the plot\n",
"\n",
"See [here](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html) a full list of possible keyword arguments."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 40,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "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qKGff/6ZoUuwtP79+6t///65HUa2SUpKSvV/YGCgqlWrpl27dmW6rtWrV+vBBx9UQkKCJOmee+5Rjx49VKZMGZ07d04LFy7UqlWrdOTIEbVr107r169XtWrVHNa1d+9etWzZUtHR0ZKk22+/XY8++qgqVaqkyMhILV26VIsXL9a5c+fUuXNnrVixQvfee6/DugzDSHWdabPZVLVqVV24cEGXLl3K9Ha6avfu3ZIkHx8fNW7cWM2aNVPlypVVoEABHT16VLNnz9auXbsUHR2tvn37SpL69OmTbn3Hjx9X+/bt9d9//0mS6tevrz59+qhYsWLavXu3Jk6cqIsXL+r777+XzWbTzJkzHdazb98+87jffvvtatmypWrVqqVChQrp3LlzWrJkiZYuXark5GR99NFHioqK0qRJk9KNKz4+Xh07dtSff/4pSSpfvryGDBmiqlWr6tSpU/ruu+/0999/a9u2bWrfvr3++usvhYSEOKyrSZMmaty4sdatW6fRo0erbdu2GezldLid4oJHJCcnG02bNjWzjhMmTEi37K5duwx/f39DklGsWDHjv//+y8FIswc9quAqq/4adrNIOXfcc889Hq87OTnZqFSpkiHJKF68uPHAAw+Yx+rQoUMeb88TOPfkHt7LeRvH37mEhASjfPnyhiSjTZs2uR2OQ6dPnzaPYc+ePXM7HOCm5akeVQsXLjSefPJJ47vvvjN27txpJCYmGkePHs10j6pr164ZFSpUMNd7+eWXHZb75JNPzDItW7ZMt74GDRqY5fr06WMkJCSkKfPTTz8ZPj4+hiTjlltucVjGMAzj8uXLRs+ePY0PPvjAWLVqlREZGWkYRup9mB09qgoXLmy88sorxokTJxwuT0pKMp577jkzhkKFChkXL15Mt75OnTqZZQcOHGgkJSWlWn7s2LFUxyC9UQ9t2rQxevfu7bRX248//mj4+fmZda1cuTLdsp9++mmqXlMRERGpll+9etVo27atWeb5559Pty7DMIyJEyeaZcPDw52WTQ9zVOUym82mqVOnKigoSJL08ssv68iRI2nKJSYmqn///oqPj5ckffnllypRokSOxgrg5pVy7ggICPB43WvWrNHRo0clST179tTAgQPNZd7WCwkAstP//vc/nTx5UpLzX+VzU1xcnPl3dnymAMicTp066YsvvtCAAQNUu3Zt+fr6ulXPokWLdOLECUlS3bp19e677zos98wzz+j++++XJK1atUorV65MU2bjxo3auHGjJKls2bKaNGmS/PzSDubq0qWLhg0bJun6XFDTp0932GbBggU1Z84cPf/882rRooVCQ0Mzv4Fu+Oeff/TOO++ofPnyDpf7+Pjoww8/VL169SRJkZGRWrx4scOyO3fu1KJFiyRJFSpU0Jdffikfn9TpmLCwsFRzV48ZM8ZhXT/88INmzZqlu+++O93Yu3btqhEjRpj/p7dvExMT9c4770i6npuYMWOGChcunKpM/vz5NWPGDDNnMWHCBKdzi3Xt2tX8fPjqq6/SLecMiSoLqFy5ssaPHy/p+sRqAwYMSDOEZty4cdq2bZskqVu3burevbu5LDk5WfPmzVOPHj1UqVIlFShQQMHBwbr11lv1+OOPm10WnTlx4oS++OILdevWTbfccosKFiwof39/lShRQs2bN9f48eMVFRX
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 1400x800 with 1 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"plt.rcParams.update({'font.size': 18}) # must set in top\n",
"df['t2m'].plot(\n",
" figsize=(14,8),\n",
" kind='bar',\n",
" color=df.positive.map({True: 'red', False: 'blue'}),\n",
" fontsize=14,\n",
" xlabel='\\nYear',\n",
" ylabel='Temperature Anomaly',\n",
" title='\\nYearly anomalies of Arctic air temperature (reference period 1991-2020)\\n',\n",
" )\n",
"plt.savefig(f'{DATADIR}Arctic_t2m_anom_bar.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the plot above, you see that since 2005, each year the Arctic near-surface air temperature was warmer than the reference mean for the period 1991-2020."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Seasonal analysis of Arctic near-surface air temperature\n",
"\n",
"In the final part of this tutorial we will compare seasonal trends in Arctic near-surface air temperature. To do this we return to our monthly geographically averaged dataset, and we will downsample the monthly averages to seasonal averages using the function `resample()`. By specifying `time='QS-DEC'`, the data is split into consecutive three-month periods, anchored at December. If we add additionally the function `mean()`, we calculate the average of the three-month period."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 41,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [],
"source": [
"Arc_seasonal = Arc_mean.resample(time='QS-DEC').mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the code below, before visualising the seasonal average air temperature data for the Arctic, we create for each season (`winter`, `spring`, `summer` and `autumn`) a `pandas.DataFrame`. We then create a `for` loop to visualise each seasonal time series in a successive plot."
]
},
{
"cell_type": "code",
2024-10-18 16:31:00 +02:00
"execution_count": 42,
2024-10-18 16:30:09 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-10-18 16:31:00 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmcAAANtCAYAAADVXtzDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3iT1dsH8G9KN6WFlpZZyt57b8oGQZQNIltAlqCoCCiI/pAt4mIJFEQUUEEBAUGKgqCyoSzZu6zSFgudud8/zpukoWmbtknztHw/15WrzTPPyZPkuXOmTkQERERERKQJTo5OABERERGZMDgjIiIi0hAGZ0REREQawuCMiIiISEMYnBERERFpCIMzIiIiIg1hcEZERESkIQzOiIiIiDSEwRkRERGRhjA4IyIiItIQBmdEREREGsLgjIiIiEhDGJwRERERaQiDMyIiIiINYXBGREREpCEMzoiIiIg0hMEZERERkYYwOCMiIiLSEAZnRERERBrC4IyIiIhIQxicEREREWkIgzMiIiIiDWFwRkRERKQhDM6IiIiINITBGREREZGGMDgjIiIi0hAGZ0REREQawuCMiIiISEMYnBERERFpCIMzIiIiIg1hcEZERESkIQzOiIiIiDQky8FZjRo1oNPp4ObmhgcPHtgiTTZXsmRJ6HQ6XLlyxdFJIRsJCQmBTqfDoEGDHJ0U0rDTp0/jxRdfREBAAPLkyQOdTof3338/3f2OHj2KmTNnonXr1ihUqBBcXFxQoEABNGvWDF988QUSEhLsn3g7unLlCnQ6HUqWLOnopJAFR44cwbx589C3b1+UL18eTk5O0Ol0WLNmTbr7Xr9+HWPGjEGZMmXg5uaGggULon379ti6dWuq++h0Oqseq1evTrHv48ePMXPmTNSsWRN58+ZFvnz5UK9ePXz22WdISkrKVP6vXbuGJUuWoFu3bggKCoKbmxu8vLxQo0YNTJ48Gffu3Utz/0ePHmHy5MmoUKECPDw8ULBgQXTq1Am7d++2uP3jx4+xZcsWjBkzBjVq1EC+fPng6uqKwMBA9OnTB3/++We6ad6wYQOCg4NRoEAB5M2bFzVq1MCcOXMy/10hWfDPP/8IAOPjk08+ycrhMmXgwIECQFauXJnqNkFBQQJALl++nG3pIvtauXKlAJCBAwc6OimkUf/995+ULFlSAEjdunXl5ZdfloEDB8rGjRvT3C8hIcH4nebl5SUtW7aUPn36SNOmTSVPnjwCQOrXry8PHz7MlnzYw+XLlwWABAUF2fzY06ZNEwAybdo0mx/7WfHCCy+Y3VsNj6+//jrN/f755x/x9fUVAFKkSBF54YUXpGnTpuLi4iIAZOrUqRb3GzhwYKqPli1bCgDR6XRy5coVs/0ePHggNWrUEACSL18+adu2rXTo0EHy588vAKRt27YSFxeX4fw3adJEAIizs7PUq1dPevfuLW3bthVvb28BIP7+/nL06FGL+965c0fKly9vfA169uwpzZs3F51OJzqdTj799NMU+yxbtsz4GgcFBckLL7wg3bt3l7Jlyxrz/r///S/V9I4bN86Y3nbt2km3bt2Mr0HTpk3l8ePHGX4NshScjRgxQgBIsWLFBIBUq1YtK4fLFGuCswsXLsiZM2ckPj4++xJGdsXgjNITGhoqAKRx48YZ2i8hIUHq1Kkj69evl9jYWLN1J06ckCJFiggAGTx4sC2Tm63i4+PlzJkzcuHCBZsfm8FZ1s2cOVMmT54s33//vVy8eFFatGiRbnD25MkTCQwMFADSu3dvs4Dgn3/+ET8/PwEgv/76a4bSMnLkSGOg9bSePXsKAKlatapcu3bNuDw8PFzq168vAGTy5MkZOp+ISK9evWTBggVy//59s+V3796V4OBgASDlypWTxMTEFPsaAtvWrVtLTEyMcfnWrVslT5484uTkJMePHzfbJyQkRIYMGSJHjhwxW67X62X+/PnGwG3Pnj0pzrdx40bjD7nDhw8bl9+7d0+qVasmAGTChAkZfg0yHZzFxMQYo9jdu3eLl5eXAJB//vkns4fMFGuCM8p9GJxRelatWmWX98jXX38tAMTDw4M/+CxgcGZ71gRna9euFQCSP39+i6W6CxcuNJbkWOvJkyfGEqDvvvvObN3NmzdFp9MJAAkNDU2x7/Hjx42fk+joaKvPmZ7r168bg6W9e/earTt16pQAkDx58qQo5RMRGTp0qACQPn36ZOicrVu3FgAydOjQFOvq1asnACyWrO3du1cAiJubm0RGRmbonJkOzkJCQowRs4gp0yNGjEh1H8MbLDQ0VP744w/p3LmzFCxYUHQ6nVlwFRMTIwsWLJAmTZpI/vz5xdXVVUqUKCGdO3eWb775RkRMxfKpPZJ/MaRVranX6+WHH36QTp06SaFChcTFxUUKFSokTZo0kVmzZmWoOHL9+vXSunVr8fX1FWdnZ/H19ZVKlSrJK6+8kiJSN9iwYYO0b99eChYsKC4uLlK0aFHp16+fnDp1yuL2O3fulDFjxkiNGjXEz89PXF1dpVixYtKrV69UA+OkpCRZsmSJNG7cWHx8fMTZ2Vn8/f2levXqMmbMGIuvy4MHD2TSpElSuXJl8fDwEC8vL6ldu7bMnj3b4mtiKKVo0aKFxMfHy6xZs6Ry5cri7u4uvr6+0rVrVzl9+rTN8pTZ4Cyj5+rTp48AkJkzZ6Z6zM2bNwsAqVmzZop1586dk+HDh0vp0qXFzc1NvL29pVmzZql+yVrzGYmOjpalS5dK165dpWzZsuLp6Smenp5StWpVmTx5cprVbVeuXJGBAwdKoUKFxM3NTcqWLStTp06VJ0+emJ3bkoy+Vw8dOiS9evWSYsWKiYuLi+TLl09KlSol3bp1k02bNqWaxtRs375dOnXqJP7+/uLi4iJFihSRXr16ycGDB822M7wXU3tkVVhYmPFYt27dMluX/Mfi2bNnpVevXuLv7y+enp5St25ds3z/9ddf8vzzz0vBggXF3d1dGjZsKLt27cpwek6dOiVTp06Vxo0bS9GiRcXFxUV8fX2ldevWsm7dOov7pFWtmfx1WrFihTRs2ND4Qzy9piFpve5Pf1YTEhJk2bJl0qJFCylQoIC4urpKyZIl5dVXXzUrhTFI/h0TGxsr77//vpQrV07c3NwkMDBQ3n77bXny5ImIiERGRsqECROkVKlS4ubmJkFBQTJt2jRJSEhIcdzk1+zYsWPStWtX4zWpVq2afPLJJxZLaLKTNcHZ66+/biwxssQQuOh0Orl9+7ZV512zZo0AEF9f3xSlyD/99JMAEFdXV0lKSrK4v7+/v8XALqsKFiwoAGTt2rVmy//3v/8JAGnevLnF/X777TcBIHnz5s3QD6s333xTAEi7du3Mlt+4ccP4/r506ZLFfQ2lmU+nNT2Z/qZq1qyZAJCPP/5YRET+/PNPASA+Pj6pBjSGN9ioUaPEyclJKleuLH369JF27doZE37t2jWpXLmyABBPT09p27at9OnTR5o1ayY+Pj7GL5N79+7JwIEDpUyZMgJAmjRpYlZPnrxdSWrBWXx8vHTr1k0AiJOTkzRs2FD69u0rbdu2NVbVWttObfr06cY65+bNm0vfvn3lueeek6pVq4pOp5MFCxaYbZ+QkCC9evUyRtWNGzeWnj17GuvvPTw8ZNu2bSnOU6ZMGXF1dZVatWpJly5dpFu3bsbXy9nZWb7//vsU+wwePFgAiLu7u7Rp00b69u0r7du3l3LlygmAFG1wLl68aHzN/P39pXv37tKlSxfJly+fAJDatWtLRESE2T7Jq5DatGkjnp6e0qFDB+nevbvxzZk/f36Lr2dm8pTZ4Cyj59qxY4cAkIoVK6Z6TMN76Om2DOvXrxd3d3fj/l27dpVWrVpJ3rx5U60Ws+YzYvg15u/vL02bNpXevXtLu3btjNUWZcuWTVEdIKK+nA1fakWLFpVevXpJp06dJG/evNK0aVNp3LixxeAsM+/VXbt2Gdu51KhRQ3r06CFdu3aV+vXri5ubm7zwwgtpXaYU3n33XeONpUmTJtK3b1+pWbOm8Vfy8uXLjdueOXNGBg4caGy3UqZMGbPvhqwyVGO
2024-10-18 16:30:09 +02:00
"text/plain": [
2024-10-18 16:31:00 +02:00
"<Figure size 600x900 with 4 Axes>"
2024-10-18 16:30:09 +02:00
]
},
2024-10-18 16:31:00 +02:00
"metadata": {},
2024-10-18 16:30:09 +02:00
"output_type": "display_data"
}
],
"source": [
"fig, axs = plt.subplots(4, 1, figsize = (6, 9))\n",
"\n",
"season_list = [\"winter\", \"spring\", \"summer\", \"autumn\"]\n",
"\n",
"for i in range(4):\n",
" df = Arc_seasonal[i::4].to_dataframe()\n",
" mid_range = np.around(df.mean().values)\n",
" axs[i].plot(df.t2m, color='blue')\n",
" axs[i].set_ylim([mid_range[0]-4, mid_range[0]+4])\n",
" axs[i].set_title(season_list[i], fontsize=12)\n",
" axs[i].tick_params(axis='x', labelsize=10)\n",
" axs[i].tick_params(axis='y', labelsize=10)\n",
"\n",
"fig.suptitle('\\nArctic seasonal averages of 2m air temp - 1979-2020\\n', fontsize=16)\n",
"fig.tight_layout(pad=1.0)\n",
"\n",
"fig.savefig(f'{DATADIR}Arctic_seasonal.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note the difference in variability of the seasonal average of air temperature in the Arctic: mean summer temperatures seem to be more constant compared to the other seasons."
]
}
],
"metadata": {
"kernelspec": {
2024-10-18 16:31:00 +02:00
"display_name": "venv",
2024-10-18 16:30:09 +02:00
"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",
2024-10-18 16:31:00 +02:00
"version": "3.12.6"
2024-10-18 16:30:09 +02:00
}
},
"nbformat": 4,
"nbformat_minor": 4
}