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

129 lines
183 KiB
Text
Raw Permalink Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
2018-09-05 15:52:38 -06:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['74992', '74998', '74996', '74995', '74997', '74994', '74991', '74990', '74993']\n"
]
2018-09-05 15:52:38 -06:00
}
],
"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 numpy as np\n",
"import six\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Query ESRL/PSD profiler data from Unidata AWIPS\n",
2018-09-06 13:05:37 -06:00
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest(\"profiler\")\n",
2018-09-05 15:52:38 -06:00
"profilerSites = DataAccessLayer.getAvailableLocationNames(request)\n",
"print(profilerSites)\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1152x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
2018-09-05 15:52:38 -06:00
"%matplotlib inline\n",
"fig = plt.figure(figsize=(16,12))\n",
"site = profilerSites[-1]\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Request the last twelve hourly obs\n",
"request = DataAccessLayer.newDataRequest(\"profiler\")\n",
"request.setLocationNames(site)\n",
"request.setParameters(\"uComponent\",\"vComponent\")\n",
"hrs=12\n",
"requestTimes = DataAccessLayer.getAvailableTimes(request)[-1*hrs:]\n",
"response = DataAccessLayer.getGeometryData(request,requestTimes)\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Create a plot for each station\n",
"ax = fig.add_subplot(1,1,1)\n",
"ax.title.set_text(site +\" \"+ str(profiler[site]['profilerId']) \\\n",
" +\", \"+ str(profiler[site]['profilerName']) \\\n",
" +\" (\"+ str(profiler[site]['latitude']) +\",\"+ str(profiler[site]['longitude']) +\")\")\n",
"ax.set_ylim(0,8000)\n",
"ax.grid(axis='x', which='major', alpha=0.5)\n",
"ax.grid(axis='y', which='major', linestyle=':')\n",
"ax.xaxis_date()\n",
"ax.set_xlim(min(requestTimes).validPeriod.start-timedelta(hours=1), max(requestTimes).validPeriod.start+timedelta(hours=1))\n",
2018-09-05 15:52:38 -06:00
"\n",
"# Plot profiler observations\n",
"for time in requestTimes:\n",
" data,t=[],[]\n",
" u,v=[],[]\n",
" for ob in response:\n",
" if str(ob.getDataTime().getValidPeriod().start) == str(time):\n",
" data_tuple = (float(ob.getLevel().replace('FHAG','')),\n",
" float(ob.getNumber(\"uComponent\")),\n",
" float(ob.getNumber(\"vComponent\")))\n",
" data.append(data_tuple)\n",
" t.append(time.validPeriod.start)\n",
"\n",
" data = np.array(data, dtype=[\n",
" ('h', np.float32),\n",
" ('u', np.float32),\n",
" ('v', np.float32)])\n",
"\n",
" u = data['u']\n",
" v = data['v']\n",
" h = data['h']\n",
2018-09-05 15:52:38 -06:00
" C = np.sqrt(u**2 + v**2)\n",
" ax.barbs(date2num(t), h, u, v, C, cmap=plt.cm.RdYlGn_r)\n",
"\n",
"plt.gca().invert_xaxis()"
2018-09-05 15:52:38 -06:00
]
}
],
"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
}