python-awips/examples/Grid Display.ipynb

510 lines
556 KiB
Text
Raw Normal View History

2016-03-12 14:17:35 -07:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python AWIPS Data Access Framework\n",
"\n",
2016-03-13 19:38:46 -05:00
"The [`python-awips`](http://www.github.com/Unidata/python-awips) package provides a Data Acccess Framework (DAF) for requesting data from a remote AWIPS II EDEX server. \n",
"\n",
2016-03-13 19:38:46 -05:00
"The [AWIPS II Python Stack](http://) installed via RPM contains the DAF, matplotlib, numpy, scipy, basemap, pint, shapely, and other packages. \n",
"\n",
"## Listing a Grid Inventory"
]
},
2016-03-12 14:17:35 -07:00
{
"cell_type": "code",
2016-03-12 22:17:13 -06:00
"execution_count": 1,
2016-03-12 14:17:35 -07:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2016-03-12 22:17:13 -06:00
"AVN211\n",
"AVN225\n",
"DGEX\n",
"ECMF-Global\n",
"ECMF1\n",
"ECMF10\n",
"ECMF11\n",
"ECMF12\n",
"ECMF2\n",
2016-03-12 14:17:35 -07:00
"ECMF3\n",
"ECMF4\n",
"ECMF5\n",
2016-03-12 22:17:13 -06:00
"ECMF6\n",
"ECMF7\n",
2016-03-12 14:17:35 -07:00
"ECMF8\n",
2016-03-12 22:17:13 -06:00
"ECMF9\n",
2016-03-12 14:17:35 -07:00
"ETA\n",
"GFS\n",
2016-03-12 22:17:13 -06:00
"GFS40\n",
"GFSGuide\n",
"GFSLAMP5\n",
"HPCGuide\n",
"HPCqpfNDFD\n",
"HRRR\n",
"LAMP2p5\n",
"MRMS_1000\n",
2016-03-12 14:17:35 -07:00
"NAM12\n",
2016-03-12 22:17:13 -06:00
"NAM40\n",
2016-03-12 14:17:35 -07:00
"NCWF\n",
"NOHRSC-SNOW\n",
2016-03-12 22:17:13 -06:00
"NamDNG\n",
"NamDNG5\n",
"QPE-MSR\n",
"RAP13\n",
"RAP40\n",
"RTMA\n",
"RTMA5\n",
"URMA25\n",
"estofsPR\n",
"estofsUS\n"
2016-03-12 14:17:35 -07:00
]
}
],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"\n",
"# Set host\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"\n",
"# Init data request\n",
"request = DataAccessLayer.newDataRequest()\n",
"\n",
"# Set datatype\n",
"request.setDatatype(\"grid\")\n",
"\n",
2016-03-13 19:38:46 -05:00
"# Get a list of all available models\n",
2016-03-12 14:17:35 -07:00
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
2016-03-13 19:38:46 -05:00
"\n",
"# Sort\n",
2016-03-12 22:17:13 -06:00
"available_grids.sort()\n",
2016-03-13 19:38:46 -05:00
"\n",
"# Print\n",
2016-03-12 14:17:35 -07:00
"for grid in available_grids:\n",
2016-03-12 22:17:13 -06:00
" print grid"
2016-03-12 14:17:35 -07:00
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"**LocationNames** is different for different plugins\n",
2016-03-12 14:17:35 -07:00
"- radar is icao\n",
"- satellite is sector\n",
"\n",
"\n",
"## Requesting a Grid"
2016-03-12 14:17:35 -07:00
]
},
{
"cell_type": "code",
2016-03-12 22:17:13 -06:00
"execution_count": 2,
2016-03-12 14:17:35 -07:00
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2016-03-12 22:17:13 -06:00
"Time : 2016-02-23 15:00:00 (12)\n",
"Model: RAP40\n",
"Unit : %\n",
"Parm : RH\n",
"(151, 113)\n",
"[[ 93.05456543 93.05456543 87.05456543 ..., 73.05456543 72.05456543\n",
" 71.05456543]\n",
" [ 70.05456543 70.05456543 67.05456543 ..., 69.05456543 46.05456924\n",
" 37.05456924]\n",
" [ 40.05456924 56.05456924 68.05456543 ..., 51.05456924 73.05456543\n",
" 74.05456543]\n",
2016-03-12 14:17:35 -07:00
" ..., \n",
2016-03-12 22:17:13 -06:00
" [ 65.05456543 62.05456924 63.05456924 ..., 67.05456543 65.05456543\n",
" 46.05456924]\n",
" [ 48.05456924 59.05456924 62.05456924 ..., 4.05456877 5.05456877\n",
" 5.05456877]\n",
" [ 7.05456877 8.05456829 10.05456829 ..., 91.05456543 95.05456543\n",
" 95.05456543]]\n",
2016-03-12 14:17:35 -07:00
"lat array = [[ 54.24940109 54.35071945 54.45080566 ..., 57.9545517 57.91926193\n",
" 57.88272858]\n",
" [ 57.84495163 57.80593109 57.76566696 ..., 58.07667542 58.08861542\n",
" 58.09931183]\n",
" [ 58.10876846 58.11697769 58.12394714 ..., 56.40270996 56.46187973\n",
" 56.51980972]\n",
" ..., \n",
" [ 19.93209648 19.89832115 19.86351395 ..., 20.054636 20.06362152\n",
" 20.07156372]\n",
" [ 20.0784626 20.08431816 20.08912849 ..., 18.58354759 18.63155174\n",
" 18.67854691]\n",
" [ 18.72453308 18.76950836 18.81346893 ..., 17.49624634 17.42861557\n",
" 17.36001205]]\n",
"lon array = [[-139.83120728 -139.32348633 -138.81448364 ..., -79.26060486\n",
" -78.70166016 -78.14326477]\n",
" [ -77.58544922 -77.02822876 -76.47161865 ..., -100.70157623\n",
" -100.13801575 -99.57427216]\n",
" [ -99.01037598 -98.44634247 -97.88218689 ..., -121.69165039\n",
" -121.15060425 -120.60871887]\n",
" ..., \n",
" [ -82.65139008 -82.26644897 -81.88170624 ..., -98.52494049\n",
" -98.13802338 -97.75105286]\n",
" [ -97.36403656 -96.97698212 -96.58989716 ..., -113.07767487\n",
" -112.69831085 -112.31866455]\n",
" [-111.93874359 -111.5585556 -111.17810822 ..., -69.85433197\n",
" -69.48160553 -69.10926819]]\n"
]
}
],
"source": [
"# Grid request\n",
"request.setLocationNames('RAP40')\n",
"request.setParameters(\"RH\")\n",
"request.setLevels(\"850MB\")\n",
2016-03-12 14:17:35 -07:00
"\n",
"# Get available times\n",
"t = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"# Select last available time [-1]\n",
2016-03-12 22:17:13 -06:00
"response = DataAccessLayer.getGridData(request, [t[0]])\n",
2016-03-12 14:17:35 -07:00
"data = response[0]\n",
2016-03-12 22:17:13 -06:00
"lon,lat = data.getLatLonCoords()\n",
2016-03-12 14:17:35 -07:00
"\n",
"# Print info\n",
2016-03-12 22:17:13 -06:00
"print 'Time :', t[-1]\n",
"print 'Model:', data.getLocationName()\n",
"print 'Unit :', data.getUnit()\n",
"print 'Parm :', data.getParameter()\n",
2016-03-12 14:17:35 -07:00
"\n",
"# Print data array\n",
2016-03-12 22:17:13 -06:00
"print data.getRawData().shape\n",
2016-03-12 14:17:35 -07:00
"print data.getRawData()\n",
"print \"lat array =\", lat\n",
2016-03-12 22:17:13 -06:00
"print \"lon array =\", lon\n"
2016-03-12 14:17:35 -07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting a Grid using Basemap\n",
2016-03-12 14:17:35 -07:00
"\n",
"Using **matplotlib**, **numpy**, and **basemap**:"
2016-03-12 14:17:35 -07:00
]
},
{
"cell_type": "code",
2016-03-12 22:17:13 -06:00
"execution_count": 3,
2016-03-12 14:17:35 -07:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2016-03-12 22:17:13 -06:00
"image/png": "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\nYxkwOkfWY7oilEWujWC
"text/plain": [
2016-03-13 19:38:46 -05:00
"<matplotlib.figure.Figure at 0x7f9435e09810>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
2016-03-12 14:17:35 -07:00
"source": [
"%matplotlib inline\n",
"import matplotlib.tri as mtri\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.transforms import offset_copy\n",
"from mpl_toolkits.basemap import Basemap, cm\n",
"import numpy as np\n",
"from numpy import linspace, transpose\n",
"from numpy import meshgrid\n",
"\n",
"plt.figure(figsize=(12, 12), dpi=100)\n",
2016-03-12 14:17:35 -07:00
"lons,lats = data.getLatLonCoords()\n",
"\n",
"map = Basemap(projection='cyl',\n",
" resolution = 'c',\n",
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
" urcrnrlon =lons.max(), urcrnrlat = lats.max()\n",
")\n",
"map.drawcoastlines()\n",
"map.drawstates()\n",
"map.drawcountries()\n",
"\n",
"# \n",
"# We have to reproject our grid, see https://stackoverflow.com/questions/31822553/m\n",
"#\n",
2016-03-12 14:17:35 -07:00
"x = linspace(0, map.urcrnrx, data.getRawData().shape[1])\n",
"y = linspace(0, map.urcrnry, data.getRawData().shape[0])\n",
"xx, yy = meshgrid(x, y)\n",
"ngrid = len(x)\n",
"rlons = np.repeat(np.linspace(np.min(lons), np.max(lons), ngrid),\n",
" ngrid).reshape(ngrid, ngrid)\n",
"rlats = np.repeat(np.linspace(np.min(lats), np.max(lats), ngrid),\n",
" ngrid).reshape(ngrid, ngrid).T\n",
"tli = mtri.LinearTriInterpolator(mtri.Triangulation(lons.flatten(),\n",
" lats.flatten()), data.getRawData().flatten())\n",
"rdata = tli(rlons, rlats)\n",
2016-03-12 22:17:13 -06:00
"cs = map.contourf(rlons, rlats, rdata, latlon=True, vmin=0, vmax=100, cmap='YlGn')\n",
2016-03-12 14:17:35 -07:00
"\n",
"# add colorbar.\n",
"cbar = map.colorbar(cs,location='bottom',pad=\"5%\")\n",
"cbar.set_label(data.getParameter() + data.getUnit() )\n",
"\n",
"# Show plot\n",
2016-03-12 14:17:35 -07:00
"plt.show()\n"
]
},
2016-03-12 22:17:13 -06:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"or use `pcolormesh` instead of `contourf`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nt5PefbIYNrKA4aMKuGT
"text/plain": [
2016-03-13 19:38:46 -05:00
"<matplotlib.figure.Figure at 0x7f94401cbfd0>"
2016-03-12 22:17:13 -06:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12, 12), dpi=100)\n",
"map = Basemap(projection='cyl',\n",
" resolution = 'c',\n",
" llcrnrlon = lons.min(), llcrnrlat = lats.min(),\n",
" urcrnrlon =lons.max(), urcrnrlat = lats.max()\n",
")\n",
"map.drawcoastlines()\n",
"map.drawstates()\n",
"map.drawcountries()\n",
"cs = map.pcolormesh(rlons, rlats, rdata, latlon=True, vmin=0, vmax=100, cmap='YlGn')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting a Grid using Cartopy\n"
]
},
2016-03-12 14:17:35 -07:00
{
"cell_type": "code",
2016-03-12 22:17:13 -06:00
"execution_count": 5,
2016-03-12 14:17:35 -07:00
"metadata": {
"collapsed": false
2016-03-12 14:17:35 -07:00
},
"outputs": [
2016-03-12 22:17:13 -06:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"/awips2/python/lib/python2.7/site-packages/matplotlib/artist.py:221: MatplotlibDeprecationWarning: This has been deprecated in mpl 1.5, please use the\n",
"axes property. A removal date has not been set.\n",
" warnings.warn(_get_axes_msg, mplDeprecation, stacklevel=1)\n"
]
},
{
"data": {
2016-03-13 19:38:46 -05:00
"image/png": "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\nS7Unol5Cy8hsmDvBVBJ
2016-03-12 22:17:13 -06:00
"text/plain": [
2016-03-13 19:38:46 -05:00
"<matplotlib.figure.Figure at 0x7f9434111ad0>"
2016-03-12 22:17:13 -06:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import os\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
2016-03-12 22:17:13 -06:00
"import iris\n",
"import cartopy.crs as ccrs\n",
2016-03-12 22:17:13 -06:00
"from cartopy import config\n",
"\n",
2016-03-12 22:17:13 -06:00
"lon,lat = data.getLatLonCoords()\n",
"plt.figure(figsize=(12, 12), dpi=100)\n",
"ax = plt.axes(projection=ccrs.PlateCarree())\n",
"cs = plt.contourf(rlons, rlats, rdata, 60, transform=ccrs.PlateCarree(), vmin=0, vmax=100, cmap='YlGn')\n",
"ax.coastlines()\n",
"ax.gridlines()\n",
"\n",
"# add colorbar\n",
2016-03-13 19:38:46 -05:00
"cbar = plt.colorbar(orientation='horizontal')\n",
2016-03-12 22:17:13 -06:00
"cbar.set_label(data.getParameter() + data.getUnit() )\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Plotting a Sounding with MetPy"
]
},
{
"cell_type": "code",
2016-03-13 19:40:41 -05:00
"execution_count": 123,
2016-03-12 22:17:13 -06:00
"metadata": {
"collapsed": false
},
"outputs": [
{
2016-03-13 19:38:46 -05:00
"data": {
2016-03-13 19:40:41 -05:00
"image/png": "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\nUQy+aJaMSH20145DtKP
2016-03-13 19:38:46 -05:00
"text/plain": [
2016-03-13 19:40:41 -05:00
"<matplotlib.figure.Figure at 0x7f94210a1d90>"
2016-03-13 19:38:46 -05:00
]
},
"metadata": {},
"output_type": "display_data"
2016-03-12 22:17:13 -06:00
}
],
"source": [
2016-03-13 19:38:46 -05:00
"from metpy.calc import get_wind_components, lcl, dry_lapse, parcel_profile\n",
"from metpy.calc import tools\n",
"from metpy.plots import SkewT, Hodograph\n",
"from metpy.units import units, concatenate\n",
"from mpl_toolkits.axes_grid1.inset_locator import inset_axes\n",
2016-03-12 22:17:13 -06:00
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
2016-03-12 22:17:13 -06:00
"# Change default to be better for skew-T\n",
2016-03-13 19:40:41 -05:00
"plt.rcParams['figure.figsize'] = (9, 9)\n",
"#fig = plt.figure(figsize=(9, 9))\n",
2016-03-13 19:38:46 -05:00
"\n",
"# Request BUFR UAIR\n",
"request.setDatatype(\"bufrua\")\n",
"request.setParameters(\"tpMan\",\"tdMan\",\"prMan\",\"htMan\",\"wdMan\",\"wsMan\")\n",
"request.setLocationNames(\"72240\")\n",
"datatimes = DataAccessLayer.getAvailableTimes(request)\n",
"response = DataAccessLayer.getGeometryData(request,times=datatimes[-1].validPeriod)\n",
"\n",
"# Initialize data arrays\n",
"tpMan,tdMan,prMan,htMan,wdMan,wsMan = [],[],[],[],[],[]\n",
"\n",
2016-03-13 19:38:46 -05:00
"# Build ordered arrays\n",
"for ob in response:\n",
" tpMan.append(float(ob.getString(\"tpMan\")))\n",
" tdMan.append(float(ob.getString(\"tdMan\")))\n",
" prMan.append(float(ob.getString(\"prMan\")))\n",
" htMan.append(float(ob.getString(\"htMan\")))\n",
" wdMan.append(float(ob.getString(\"wdMan\")))\n",
" wsMan.append(float(ob.getString(\"wsMan\")))\n",
"\n",
2016-03-13 19:38:46 -05:00
"# Convert temps to C\n",
"T = np.array(tpMan)-273.15\n",
"Td = np.array(tdMan)-273.15\n",
"p = np.array(prMan)/100\n",
"height = np.array(htMan)\n",
"direc = np.array(wdMan)\n",
"spd = np.array(wsMan)\n",
"u, v = get_wind_components(spd, np.deg2rad(direc))\n",
"p = p * units.mbar\n",
"T = T * units.degC\n",
"Td = Td * units.degC\n",
"spd = spd * units.knot\n",
"direc = direc * units.deg\n",
"\n",
"# Create a skewT plot\n",
2016-03-12 22:17:13 -06:00
"skew = SkewT()\n",
"\n",
2016-03-12 22:17:13 -06:00
"# Plot the data using normal plotting functions, in this case using\n",
"# log scaling in Y, as dictated by the typical meteorological plot\n",
"skew.plot(p, T, 'r')\n",
"skew.plot(p, Td, 'g')\n",
"skew.plot_barbs(p, u, v)\n",
"skew.ax.set_ylim(1000, 100)\n",
2016-03-13 19:38:46 -05:00
"skew.ax.set_xlim(-40, 60)\n",
"\n",
"# Calculate LCL height and plot as black dot\n",
"l = lcl(p[0], T[0], Td[0])\n",
"lcl_temp = dry_lapse(concatenate((p[0], l)), T[0])[-1].to('degC')\n",
"skew.plot(l, lcl_temp, 'ko', markerfacecolor='black')\n",
"\n",
"# Calculate full parcel profile and add to plot as black line\n",
"prof = parcel_profile(p, T[0], Td[0]).to('degC')\n",
"skew.plot(p, prof, 'k', linewidth=2)\n",
"\n",
"# Example of coloring area between profiles\n",
"skew.ax.fill_betweenx(p, T, prof, where=T>=prof, facecolor='blue', alpha=0.4)\n",
"skew.ax.fill_betweenx(p, T, prof, where=T<prof, facecolor='red', alpha=0.4)\n",
"\n",
2016-03-13 19:40:41 -05:00
"# An example of a slanted line at constant T -- in this case the 0 isotherm\n",
2016-03-13 19:38:46 -05:00
"l = skew.ax.axvline(0, color='c', linestyle='--', linewidth=2)\n",
"\n",
"# Draw hodograph\n",
2016-03-13 19:40:41 -05:00
"ax_hod = inset_axes(skew.ax, '30%', '30%', loc=3)\n",
2016-03-13 19:38:46 -05:00
"h = Hodograph(ax_hod, component_range=50.)\n",
"h.add_grid(increment=20)\n",
"h.plot_colormapped(u, v, spd)\n",
"\n",
2016-03-12 22:17:13 -06:00
"# Show the plot\n",
"plt.show()"
]
2016-03-12 14:17:35 -07:00
},
2016-03-13 19:38:46 -05:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
2016-03-12 14:17:35 -07:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.9"
2016-03-12 14:17:35 -07:00
}
},
"nbformat": 4,
"nbformat_minor": 0
}