python-awips/examples/notebooks/AWIPS_Grids_and_Cartopy.ipynb

146 lines
486 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": 1,
"metadata": {},
2018-09-05 15:52:38 -06:00
"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",
2018-09-06 13:05:37 -06:00
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
2018-09-05 15:52:38 -06:00
"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",
2018-09-06 13:05:37 -06:00
"execution_count": 2,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [
{
"data": {
2018-09-06 13:05:37 -06:00
"image/png": "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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1152x648 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"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(grid.getLocationName().decode('UTF-8') +\" \" \\\n",
" + grid.getLevel().decode('UTF-8') + \" \" \\\n",
" + grid.getParameter().decode('UTF-8') \\\n",
" + \" (\" + grid.getUnit().decode('UTF-8') + \") \" \\\n",
2018-09-05 15:52:38 -06:00
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### with contourf"
]
},
{
"cell_type": "code",
2018-09-06 13:05:37 -06:00
"execution_count": 3,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [
{
"data": {
2018-09-06 13:05:37 -06:00
"image/png": "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
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 1152x648 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"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(grid.getLocationName().decode('UTF-8') +\" \" \\\n",
" + grid.getLevel().decode('UTF-8') + \" \" \\\n",
" + grid.getParameter().decode('UTF-8') \\\n",
" + \" (\" + grid.getUnit().decode('UTF-8') + \") \" \\\n",
2018-09-05 15:52:38 -06:00
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
2018-09-05 15:52:38 -06:00
"language": "python",
"name": "python3"
2018-09-05 15:52:38 -06:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
2018-09-05 15:52:38 -06:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
2018-09-05 15:52:38 -06:00
}
},
"nbformat": 4,
"nbformat_minor": 1
2018-09-05 15:52:38 -06:00
}