python-awips/examples/notebooks/Profiler_Wind_Barb_Time-Series.ipynb

111 lines
1.7 MiB
Text
Raw Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n5b+H+WrsLLzdA87leKC
"text/plain": [
"<matplotlib.figure.Figure at 0x107727fd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"from awips.tables import profiler\n",
"import matplotlib.tri as mtri\n",
"from datetime import datetime, timedelta\n",
"from matplotlib.dates import date2num\n",
"from metpy.units import units\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# Query ESRL/PSD profiler data from Unidata AWIPS\n",
"DataAccessLayer.changeEDEXHost(\"js-157-49.jetstream-cloud.org\")\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"profiler\")\n",
"profilerSites = DataAccessLayer.getAvailableLocationNames(request)\n",
"\n",
"%matplotlib inline\n",
"fig = plt.figure(figsize=(16,7*len(profilerSites)))\n",
" \n",
"for i, site in enumerate(profilerSites):\n",
" request = DataAccessLayer.newDataRequest()\n",
" request.setDatatype(\"profiler\")\n",
" request.setLocationNames(site)\n",
" request.setParameters(\"uComponent\",\"vComponent\")\n",
"\n",
" # Request the last twelve hourly obs\n",
" hrs=12\n",
" requestTimes = DataAccessLayer.getAvailableTimes(request)[-1*hrs:]\n",
" response = DataAccessLayer.getGeometryData(request,requestTimes)\n",
"\n",
" # Build arrays \n",
" u,v,times=[],[],[]\n",
" for time in requestTimes:\n",
" uu,vv,heights=[],[],[]\n",
" for ob in response:\n",
" if str(ob.getDataTime().getValidPeriod().start) == str(time):\n",
" uu.append(float(ob.getString(\"uComponent\")))\n",
" vv.append(float(ob.getString(\"vComponent\")))\n",
" heights.append(float(ob.getLevel().translate(None, 'FHAG')))\n",
" u.append(uu)\n",
" v.append(vv)\n",
" times.append(time.validPeriod.start)\n",
"\n",
" # Convert u,v components to knots and transpose arrays to match t,h\n",
" u = (np.asarray(u, dtype=np.float32) * units('m/s')).to('knots').T\n",
" v = (np.asarray(v, dtype=np.float32) * units('m/s')).to('knots').T\n",
" t, h = np.meshgrid(times, heights)\n",
" C = np.sqrt(u**2 + v**2)\n",
" cmap=plt.cm.RdYlGn_r\n",
" \n",
" profilerName=str(profiler[site]['profilerName'])\n",
" profilerId=str(profiler[site]['profilerId'])\n",
" profilerLat=str(profiler[site]['latitude'])\n",
" profilerLng=str(profiler[site]['longitude'])\n",
" imgTitle=site +\" \"+ profilerId +\", \"+ profilerName +\" (\"+ profilerLat +\",\"+ profilerLng +\")\"\n",
" \n",
" ax = fig.add_subplot(len(profilerSites),1,i+1)\n",
" ax.title.set_text(imgTitle)\n",
" ax.barbs(date2num(t), h, u, v, C, cmap=cmap)\n",
" ax.xaxis_date()\n",
" ax.set_xlim(times[0]-timedelta(hours=1), times[-1]+timedelta(hours=1))\n",
" ax.set_ylim(0,10000)\n",
" ax.grid(axis='x', which='major', alpha=0.5)\n",
" ax.grid(axis='y', which='major', linestyle=':')\n",
" plt.gca().invert_xaxis()\n",
"\n",
"fig.show()"
]
}
],
"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.14"
}
},
"nbformat": 4,
"nbformat_minor": 1
}