{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Read a grib file and make a contour plot of the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example, we demonstrate:\n", "1. How to read a grib file in Python using `xarray` \n", "2. How to make a contour plot of the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data\n", "We will read the ERA-Interim for geopotential height at 500hPa for Jan 6, 2010\n", "\n", "The data are located on the COLA severs in the following directory:\n", "```/shared/working/rean/era-interim/daily/data/2010/```\n", "\n", "The filename is:\n", "```ei.oper.an.pl.regn128cm.2010010600```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python import statements\n", "You must first import the Python packages you wish to use. \n", "This is a common set of basic import statments you can start with." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import xarray as xr\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set the path and filename" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "path='/shared/working/rean/era-interim/daily/data/2010/'\n", "fname='ei.oper.an.pl.regn128cm.2010010600'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the data using `xarray` `open_dataset` http://xarray.pydata.org/en/stable/generated/xarray.open_dataset.html" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "ds=xr.open_dataset(path+fname,engine='cfgrib',backend_kwargs={'indexpath': ''})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When you read in data using `xarray`, it creates an object called an `xarray.Dataset` which consists of your data and all its metadata. If we print out our `Dataset` which is called `ds`, its similar to doing a `ncdump -h` on a netcdf file. You can see all the dimensions, size, and attributes of the data in the file." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset>\n",
       "Dimensions:        (isobaricInhPa: 37, latitude: 256, longitude: 512)\n",
       "Coordinates:\n",
       "    number         int64 ...\n",
       "    time           datetime64[ns] ...\n",
       "    step           timedelta64[ns] ...\n",
       "  * isobaricInhPa  (isobaricInhPa) int64 1000 975 950 925 900 875 ... 7 5 3 2 1\n",
       "  * latitude       (latitude) float64 89.46 88.77 88.07 ... -88.07 -88.77 -89.46\n",
       "  * longitude      (longitude) float64 0.0 0.7031 1.406 ... 357.9 358.6 359.3\n",
       "    valid_time     datetime64[ns] ...\n",
       "Data variables:\n",
       "    pv             (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    z              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    t              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    q              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    w              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    vo             (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    d              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    r              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    o3             (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    clwc           (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    ciwc           (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    cc             (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    u              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "    v              (isobaricInhPa, latitude, longitude) float32 ...\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2020-01-21T22:19:06 GRIB to CDM+CF via cfgrib-0....
" ], "text/plain": [ "\n", "Dimensions: (isobaricInhPa: 37, latitude: 256, longitude: 512)\n", "Coordinates:\n", " number int64 ...\n", " time datetime64[ns] ...\n", " step timedelta64[ns] ...\n", " * isobaricInhPa (isobaricInhPa) int64 1000 975 950 925 900 875 ... 7 5 3 2 1\n", " * latitude (latitude) float64 89.46 88.77 88.07 ... -88.07 -88.77 -89.46\n", " * longitude (longitude) float64 0.0 0.7031 1.406 ... 357.9 358.6 359.3\n", " valid_time datetime64[ns] ...\n", "Data variables:\n", " pv (isobaricInhPa, latitude, longitude) float32 ...\n", " z (isobaricInhPa, latitude, longitude) float32 ...\n", " t (isobaricInhPa, latitude, longitude) float32 ...\n", " q (isobaricInhPa, latitude, longitude) float32 ...\n", " w (isobaricInhPa, latitude, longitude) float32 ...\n", " vo (isobaricInhPa, latitude, longitude) float32 ...\n", " d (isobaricInhPa, latitude, longitude) float32 ...\n", " r (isobaricInhPa, latitude, longitude) float32 ...\n", " o3 (isobaricInhPa, latitude, longitude) float32 ...\n", " clwc (isobaricInhPa, latitude, longitude) float32 ...\n", " ciwc (isobaricInhPa, latitude, longitude) float32 ...\n", " cc (isobaricInhPa, latitude, longitude) float32 ...\n", " u (isobaricInhPa, latitude, longitude) float32 ...\n", " v (isobaricInhPa, latitude, longitude) float32 ...\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2020-01-21T22:19:06 GRIB to CDM+CF via cfgrib-0...." ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you want to access just the Geopotential Height, without all the other variables, you can do that by supplying the name of the variable" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.DataArray 'z' (isobaricInhPa: 37, latitude: 256, longitude: 512)>\n",
       "[4849664 values with dtype=float32]\n",
       "Coordinates:\n",
       "    number         int64 ...\n",
       "    time           datetime64[ns] ...\n",
       "    step           timedelta64[ns] ...\n",
       "  * isobaricInhPa  (isobaricInhPa) int64 1000 975 950 925 900 875 ... 7 5 3 2 1\n",
       "  * latitude       (latitude) float64 89.46 88.77 88.07 ... -88.07 -88.77 -89.46\n",
       "  * longitude      (longitude) float64 0.0 0.7031 1.406 ... 357.9 358.6 359.3\n",
       "    valid_time     datetime64[ns] ...\n",
       "Attributes:\n",
       "    GRIB_paramId:                             129\n",
       "    GRIB_shortName:                           z\n",
       "    GRIB_units:                               m**2 s**-2\n",
       "    GRIB_name:                                Geopotential\n",
       "    GRIB_cfName:                              geopotential\n",
       "    GRIB_cfVarName:                           z\n",
       "    GRIB_dataType:                            an\n",
       "    GRIB_missingValue:                        9999\n",
       "    GRIB_numberOfPoints:                      131072\n",
       "    GRIB_totalNumber:                         0\n",
       "    GRIB_typeOfLevel:                         isobaricInhPa\n",
       "    GRIB_NV:                                  0\n",
       "    GRIB_stepUnits:                           1\n",
       "    GRIB_stepType:                            instant\n",
       "    GRIB_gridType:                            regular_gg\n",
       "    GRIB_gridDefinitionDescription:           Gaussian Latitude/Longitude Grid\n",
       "    GRIB_Nx:                                  512\n",
       "    GRIB_iDirectionIncrementInDegrees:        0.703\n",
       "    GRIB_iScansNegatively:                    0\n",
       "    GRIB_longitudeOfFirstGridPointInDegrees:  0.0\n",
       "    GRIB_longitudeOfLastGridPointInDegrees:   359.297\n",
       "    GRIB_N:                                   128\n",
       "    GRIB_Ny:                                  256\n",
       "    long_name:                                Geopotential\n",
       "    units:                                    m**2 s**-2\n",
       "    standard_name:                            geopotential
" ], "text/plain": [ "\n", "[4849664 values with dtype=float32]\n", "Coordinates:\n", " number int64 ...\n", " time datetime64[ns] ...\n", " step timedelta64[ns] ...\n", " * isobaricInhPa (isobaricInhPa) int64 1000 975 950 925 900 875 ... 7 5 3 2 1\n", " * latitude (latitude) float64 89.46 88.77 88.07 ... -88.07 -88.77 -89.46\n", " * longitude (longitude) float64 0.0 0.7031 1.406 ... 357.9 358.6 359.3\n", " valid_time datetime64[ns] ...\n", "Attributes:\n", " GRIB_paramId: 129\n", " GRIB_shortName: z\n", " GRIB_units: m**2 s**-2\n", " GRIB_name: Geopotential\n", " GRIB_cfName: geopotential\n", " GRIB_cfVarName: z\n", " GRIB_dataType: an\n", " GRIB_missingValue: 9999\n", " GRIB_numberOfPoints: 131072\n", " GRIB_totalNumber: 0\n", " GRIB_typeOfLevel: isobaricInhPa\n", " GRIB_NV: 0\n", " GRIB_stepUnits: 1\n", " GRIB_stepType: instant\n", " GRIB_gridType: regular_gg\n", " GRIB_gridDefinitionDescription: Gaussian Latitude/Longitude Grid\n", " GRIB_Nx: 512\n", " GRIB_iDirectionIncrementInDegrees: 0.703\n", " GRIB_iScansNegatively: 0\n", " GRIB_longitudeOfFirstGridPointInDegrees: 0.0\n", " GRIB_longitudeOfLastGridPointInDegrees: 359.297\n", " GRIB_N: 128\n", " GRIB_Ny: 256\n", " long_name: Geopotential\n", " units: m**2 s**-2\n", " standard_name: geopotential" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds['z']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use `xarray` to select only the 500 hPa level using the coordinate information rather than having to identify the array index.\n", "This is done using the `xr.sel` method" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset>\n",
       "Dimensions:        (latitude: 256, longitude: 512)\n",
       "Coordinates:\n",
       "    number         int64 ...\n",
       "    time           datetime64[ns] ...\n",
       "    step           timedelta64[ns] ...\n",
       "    isobaricInhPa  int64 500\n",
       "  * latitude       (latitude) float64 89.46 88.77 88.07 ... -88.07 -88.77 -89.46\n",
       "  * longitude      (longitude) float64 0.0 0.7031 1.406 ... 357.9 358.6 359.3\n",
       "    valid_time     datetime64[ns] ...\n",
       "Data variables:\n",
       "    pv             (latitude, longitude) float32 ...\n",
       "    z              (latitude, longitude) float32 ...\n",
       "    t              (latitude, longitude) float32 ...\n",
       "    q              (latitude, longitude) float32 ...\n",
       "    w              (latitude, longitude) float32 ...\n",
       "    vo             (latitude, longitude) float32 ...\n",
       "    d              (latitude, longitude) float32 ...\n",
       "    r              (latitude, longitude) float32 ...\n",
       "    o3             (latitude, longitude) float32 ...\n",
       "    clwc           (latitude, longitude) float32 ...\n",
       "    ciwc           (latitude, longitude) float32 ...\n",
       "    cc             (latitude, longitude) float32 ...\n",
       "    u              (latitude, longitude) float32 ...\n",
       "    v              (latitude, longitude) float32 ...\n",
       "Attributes:\n",
       "    GRIB_edition:            1\n",
       "    GRIB_centre:             ecmf\n",
       "    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts\n",
       "    GRIB_subCentre:          0\n",
       "    Conventions:             CF-1.7\n",
       "    institution:             European Centre for Medium-Range Weather Forecasts\n",
       "    history:                 2020-01-21T22:19:06 GRIB to CDM+CF via cfgrib-0....
" ], "text/plain": [ "\n", "Dimensions: (latitude: 256, longitude: 512)\n", "Coordinates:\n", " number int64 ...\n", " time datetime64[ns] ...\n", " step timedelta64[ns] ...\n", " isobaricInhPa int64 500\n", " * latitude (latitude) float64 89.46 88.77 88.07 ... -88.07 -88.77 -89.46\n", " * longitude (longitude) float64 0.0 0.7031 1.406 ... 357.9 358.6 359.3\n", " valid_time datetime64[ns] ...\n", "Data variables:\n", " pv (latitude, longitude) float32 ...\n", " z (latitude, longitude) float32 ...\n", " t (latitude, longitude) float32 ...\n", " q (latitude, longitude) float32 ...\n", " w (latitude, longitude) float32 ...\n", " vo (latitude, longitude) float32 ...\n", " d (latitude, longitude) float32 ...\n", " r (latitude, longitude) float32 ...\n", " o3 (latitude, longitude) float32 ...\n", " clwc (latitude, longitude) float32 ...\n", " ciwc (latitude, longitude) float32 ...\n", " cc (latitude, longitude) float32 ...\n", " u (latitude, longitude) float32 ...\n", " v (latitude, longitude) float32 ...\n", "Attributes:\n", " GRIB_edition: 1\n", " GRIB_centre: ecmf\n", " GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts\n", " GRIB_subCentre: 0\n", " Conventions: CF-1.7\n", " institution: European Centre for Medium-Range Weather Forecasts\n", " history: 2020-01-21T22:19:06 GRIB to CDM+CF via cfgrib-0...." ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_z500=ds.sel(isobaricInhPa=500)\n", "ds_z500" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a very simple contour plot to convince ourselves that we indeed have geopotential height at 500 hPa. We will use the `matplotlib` `plt.contourf` function for a filled contour plot. It works very similar to Matlab plotting functions. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.contourf(ds_z500['z'])\n", "plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a very simple plot, but it looks like we have global 500 hPa geopotential height. More details on how to plot maps, make nice lables, and colors, can be found in other examples." ] } ], "metadata": { "kernelspec": { "display_name": "Python (aoes)", "language": "python", "name": "aoes" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 4 }