2016-03-12 14:17:35 -07:00
{
"cells": [
2016-03-12 20:07:23 -06:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python AWIPS Data Access Framework\n",
"\n",
"The `python-awips` package provides a Data Acccess Framework (DAF) for requesting data from a remote AWIPS II EDEX server. \n",
"\n",
"The AWIPS II Python Stack 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",
"# getAvailableLocationNames method will return a list of all available models\n",
2016-03-12 22:17:13 -06:00
"#print DataAccessLayer.getAvailableLocationNames(request)\n",
2016-03-12 14:17:35 -07:00
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
2016-03-12 22:17:13 -06:00
"available_grids.sort()\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": [
2016-03-12 20:07:23 -06:00
"**LocationNames** is different for different plugins\n",
2016-03-12 14:17:35 -07:00
"- radar is icao\n",
2016-03-12 20:07:23 -06:00
"- 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",
2016-03-12 20:07:23 -06:00
"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": [
2016-03-12 20:07:23 -06:00
"## Plotting a Grid using Basemap\n",
2016-03-12 14:17:35 -07:00
"\n",
2016-03-12 20:07:23 -06:00
"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
},
2016-03-12 20:07:23 -06:00
"outputs": [
{
"data": {
2016-03-12 22:17:13 -06:00
"image/png": "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\nYxkwOkfWY7oilEWujWC
2016-03-12 20:07:23 -06:00
"text/plain": [
2016-03-12 22:17:13 -06:00
"<matplotlib.figure.Figure at 0x7fbe54a760d0>"
2016-03-12 20:07:23 -06:00
]
},
"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",
2016-03-12 20:07:23 -06:00
"from pint import UnitRegistry\n",
2016-03-12 14:17:35 -07:00
"\n",
2016-03-12 20:07:23 -06:00
"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",
2016-03-12 20:07:23 -06:00
"\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",
2016-03-12 20:07:23 -06:00
"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": [
"<matplotlib.figure.Figure at 0x7fbe572c63d0>"
]
},
"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')"
]
},
2016-03-12 20:07:23 -06:00
{
"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": {
2016-03-12 20:07:23 -06:00
"collapsed": false
2016-03-12 14:17:35 -07:00
},
2016-03-12 20:07:23 -06:00
"outputs": [
{
2016-03-12 22:17:13 -06:00
"ename": "NameError",
"evalue": "name 'sm' is not defined",
2016-03-12 20:07:23 -06:00
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
2016-03-12 22:17:13 -06:00
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-5-2022d5e9b727>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[1;31m# add colorbar\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 16\u001b[1;33m \u001b[0mcbar\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolorbar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msm\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0morientation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'horizontal'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 17\u001b[0m \u001b[0mcbar\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_label\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetParameter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetUnit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mNameError\u001b[0m: name 'sm' is not defined"
2016-03-12 20:07:23 -06:00
]
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": {
"image/png": "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\nYIX9kudFkhkBoJzYYh+
"text/plain": [
"<matplotlib.figure.Figure at 0x7fbe501142d0>"
]
},
"metadata": {},
"output_type": "display_data"
2016-03-12 20:07:23 -06:00
}
],
"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",
2016-03-12 20:07:23 -06:00
"import cartopy.crs as ccrs\n",
2016-03-12 22:17:13 -06:00
"from cartopy import config\n",
2016-03-12 20:07:23 -06:00
"\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",
"cbar = plt.colorbar(sm,orientation='horizontal')\n",
"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",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'Unit' object has no attribute 'to_base_units'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-7-8d0ba16d2b09>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmetpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcbook\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mget_test_data\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mmetpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcalc\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mget_wind_components\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmetpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcalc\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtools\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmetpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplots\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mSkewT\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/awips2/python/lib/python2.7/site-packages/metpy/calc/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mbasic\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m \u001b[1;31m# noqa\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mkinematics\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m \u001b[1;31m# noqa\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mthermo\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m \u001b[1;31m# noqa\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mturbulence\u001b[0m \u001b[1;31m# noqa\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/awips2/python/lib/python2.7/site-packages/metpy/calc/kinematics.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackage_tools\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mExporter\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconstants\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munits\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0matleast_2d\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mconcatenate\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0munits\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/awips2/python/lib/python2.7/site-packages/metpy/constants.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 80\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mexporter\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 81\u001b[0m \u001b[1;31m# Earth\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 82\u001b[1;33m \u001b[0mearth_gravity\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0munits\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgravity\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_base_units\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 83\u001b[0m \u001b[0mRe\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mearth_avg_radius\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m6.37e6\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0munits\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mm\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 84\u001b[0m \u001b[0momega\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mearth_avg_angular_vel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m2\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0munits\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpi\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0munits\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mday\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'Unit' object has no attribute 'to_base_units'"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
2016-03-12 20:07:23 -06:00
"\n",
2016-03-12 22:17:13 -06:00
"from metpy.cbook import get_test_data\n",
"from metpy.calc import get_wind_components\n",
"from metpy.calc import tools\n",
"from metpy.plots import SkewT\n",
2016-03-12 20:07:23 -06:00
"\n",
2016-03-12 22:17:13 -06:00
"# Change default to be better for skew-T\n",
"plt.rcParams['figure.figsize'] = (9, 9)\n",
2016-03-12 20:07:23 -06:00
"\n",
2016-03-12 22:17:13 -06:00
"# Parse the data\n",
"p, T, Td, direc, spd = np.loadtxt(get_test_data('sounding_data.txt'),\n",
" usecols=(0, 2, 3, 6, 7), skiprows=4, unpack=True)\n",
"#u, v = get_wind_components(spd, np.deg2rad(direc))\n",
2016-03-12 20:07:23 -06:00
"\n",
2016-03-12 22:17:13 -06:00
"# Create a skewT using matplotlib's default figure size\n",
"skew = SkewT()\n",
2016-03-12 20:07:23 -06:00
"\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",
"\n",
"# Add the relevant special lines\n",
"skew.plot_dry_adiabats()\n",
"skew.plot_moist_adiabats()\n",
"skew.plot_mixing_lines()\n",
"skew.ax.set_ylim(1000, 100)\n",
2016-03-12 20:07:23 -06:00
"\n",
2016-03-12 22:17:13 -06:00
"# Show the plot\n",
2016-03-12 20:07:23 -06:00
"plt.show()"
]
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",
2016-03-12 20:07:23 -06:00
"version": "2.7.9"
2016-03-12 14:17:35 -07:00
}
},
"nbformat": 4,
"nbformat_minor": 0
}