python-awips/examples/notebooks/AWIPS_Grids_and_Cartopy.ipynb

148 lines
438 KiB
Text
Raw Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The simplest example of requesting and plotting AWIPS gridded data with Matplotlib and Cartopy."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import cartopy.crs as ccrs\n",
"import matplotlib.pyplot as plt\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"%matplotlib inline\n",
"\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"grid\")\n",
"request.setLocationNames(\"RAP13\")\n",
"request.setParameters(\"T\")\n",
"request.setLevels(\"2.0FHAG\")\n",
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)\n",
"response = DataAccessLayer.getGridData(request, [fcstRun[0]])\n",
"grid = response[0]\n",
"data = grid.getRawData()\n",
"lons, lats = grid.getLatLonCoords()\n",
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"\n",
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(16, 9),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" gl = ax.gridlines(draw_labels=True)\n",
" gl.xlabels_top = gl.ylabels_right = False\n",
" gl.xformatter = LONGITUDE_FORMATTER\n",
" gl.yformatter = LATITUDE_FORMATTER\n",
" return fig, ax"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### with pcolormesh"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n3j1Mnz4do0ePhpeXV4H
"text/plain": [
"<matplotlib.figure.Figure at 0x10d283ed0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cmap = plt.get_cmap('rainbow')\n",
"fig, ax = make_map(bbox=bbox)\n",
"cs = ax.pcolormesh(lons, lats, data, cmap=cmap)\n",
"cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')\n",
"cbar.set_label(str(grid.getLocationName()) +\" \" \\\n",
" + str(grid.getLevel()) + \" \" \\\n",
" + str(grid.getParameter()) \\\n",
" + \" (\" + str(grid.getUnit()) + \") \" \\\n",
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### with contourf"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nDuXy5cvExcXh6OiIm5s
"text/plain": [
"<matplotlib.figure.Figure at 0x10f227710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig2, ax2 = make_map(bbox=bbox)\n",
"cs2 = ax2.contourf(lons, lats, data, 80, cmap=cmap,\n",
" vmin=data.min(), vmax=data.max())\n",
"cbar2 = fig2.colorbar(cs2, shrink=0.7, orientation='horizontal')\n",
"cbar2.set_label(str(grid.getLocationName()) +\" \" \\\n",
" + str(grid.getLevel()) + \" \" \\\n",
" + str(grid.getParameter()) \\\n",
" + \" (\" + str(grid.getUnit()) + \") \" \\\n",
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}