2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "code",
2018-09-06 12:12:07 -06:00
"execution_count": 6,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2018-09-06 12:12:07 -06:00
"84700.0 1.5\n",
"100000.0 -9999.0\n",
"92500.0 -9999.0\n",
"85000.0 -9999.0\n",
"70000.0 4.599999904632568\n",
"50000.0 6.099999904632568\n",
"40000.0 8.199999809265137\n",
"30000.0 22.100000381469727\n",
"25000.0 29.30000114440918\n",
"20000.0 18.5\n",
"15000.0 11.800000190734863\n",
"10000.0 6.099999904632568\n",
"7000.0 2.5\n",
"5000.0 2.0\n",
"3000.0 6.099999904632568\n",
"2000.0 8.199999809265137\n",
"1000.0 9.699999809265137\n",
"700.0 -9999.0\n",
2018-09-05 15:52:38 -06:00
"500.0 -9999.0\n",
"300.0 -9999.0\n",
"200.0 -9999.0\n",
"100.0 -9999.0\n"
]
},
2018-09-06 12:12:07 -06:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/mjames/miniconda2/envs/python3-awips/lib/python3.6/site-packages/metpy/calc/basic.py:736: UserWarning: Input over 12.566370614359172 radians. Ensure proper units are given.\n",
" 'Ensure proper units are given.'.format(max_radians))\n"
]
},
2018-09-05 15:52:38 -06:00
{
"data": {
2018-09-06 12:12:07 -06:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAx0AAANjCAYAAADPsXciAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl8XWWdP/DPufuSNEubpEnaJk3SBYYiiyB7i20d5TU6Lj/HhRnccMNRWWRE2akMVaeADAo66jCiOMMwbDIK0wItCAgIyN7c7Pu+3/3ec57fH+fePhdo0zS5Jyfnns/79fJFTZOT53Wa5T7P93y+X0UIASIiIiIiIqM4zF4AEREREREVNm46iIiIiIjIUNx0EBERERGRobjpICIiIiIiQ3HTQUREREREhuKmg4iIiIiIDMVNBxERERERGYqbDiIiIiIiMhQ3HUREREREZChuOoiIiIiIyFDcdBARERERkaG46SAiIiIiIkNx00FERERERIbipoOIiIiIiAzFTQcRERERERmKmw4iIiIiIjIUNx1ERERERGQobjqIiIiIiMhQ3HQQEREREZGhuOkgIiIiIiJDcdNBRERERESG4qaDiIiIiIgMxU0HEREREREZipsOIiIiIiIyFDcdRERERERkKG46iIiIiIjIUNx0EBERERGRobjpICIiIiIiQ3HTQUREREREhuKmg4iIiIiIDMVNBxERERERGYqbDiIiIiIiMhQ3HUREREREZChuOoiIiIiIyFDcdBARERERkaG46SAiIiIiIkNx00FERERERIbipoOIiIiIiAzFTQcRERERERmKmw4iIiIiIjIUNx1ERERERGQobjqIiIiIiMhQ3HQQEREREZGhuOkgIiIiIiJDcdNBRERERESG4qaDiIiIiIgMxU0HEREREREZipsOIiIiIiIyFDcdRERERERkKG46iIiIiIjIUNx0EBERERGRobjpICIiIiIiQ3HTQUREREREhuKmg4iIiIiIDMVNBxERERHZhqIoHkVR0mavw2646SAiIiIiO2kA4DR7EXbDTQcRERER2clKsxdgR9x0EBEREVHBUhTFrSiKL+dN3HSYgJsOIiIiIipkOwDEFEURiqJ8Ddx0mEIRQpi9BiIiIiIiwyiK8j4Af8BbD9w3CyGeMGlJtsNKBxEREREVNCHE/wkh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
2018-09-05 15:52:38 -06:00
"text/plain": [
2018-09-06 12:12:07 -06:00
"<Figure size 864x1008 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
2018-09-06 12:12:07 -06:00
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from awips.dataaccess import DataAccessLayer\n",
"\n",
"import matplotlib.tri as mtri\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.axes_grid1.inset_locator import inset_axes\n",
"import numpy as np\n",
"\n",
2018-09-06 12:12:07 -06:00
"from metpy.calc import wind_components, lcl, dry_lapse, parcel_profile\n",
2018-09-05 15:52:38 -06:00
"from metpy.plots import SkewT, Hodograph\n",
"from metpy.units import units, concatenate\n",
"\n",
"plt.rcParams['figure.figsize'] = (12, 14)\n",
"\n",
"# Set EDEX host\n",
2018-09-06 12:12:07 -06:00
"DataAccessLayer.changeEDEXHost(\"149.165.156.89\")\n",
"\n",
2018-09-05 15:52:38 -06:00
"request = DataAccessLayer.newDataRequest()\n",
"\n",
"# Data type bufrua\n",
"request.setDatatype(\"bufrua\")\n",
"# Parameters\n",
"request.setParameters(\"tpMan\",\"tdMan\",\"prMan\",\"htMan\",\"wdMan\",\"wsMan\")\n",
"# Station ID (name doesn't work yet)\n",
"request.setLocationNames(\"72469\")\n",
"datatimes = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"# Get most recent record\n",
"response = DataAccessLayer.getGeometryData(request,times=datatimes[-1].validPeriod)\n",
"\n",
"# Initialize data arrays\n",
"tpMan,tdMan,prMan,htMan,wdMan,wsMan = [],[],[],[],[],[]\n",
"\n",
"# Build ordered arrays\n",
"for ob in response:\n",
2018-09-06 12:12:07 -06:00
" print(float(ob.getString(b\"prMan\")), float(ob.getString(b\"wsMan\")))\n",
" tpMan.append(float(ob.getString(b\"tpMan\")))\n",
" tdMan.append(float(ob.getString(b\"tdMan\")))\n",
" prMan.append(float(ob.getString(b\"prMan\")))\n",
" htMan.append(float(ob.getString(b\"htMan\")))\n",
" wdMan.append(float(ob.getString(b\"wdMan\")))\n",
" wsMan.append(float(ob.getString(b\"wsMan\")))\n",
2018-09-05 15:52:38 -06:00
"\n",
"# we can use units.* here...\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",
2018-09-06 12:12:07 -06:00
"u, v = wind_components(spd, np.deg2rad(direc))\n",
2018-09-05 15:52:38 -06:00
"\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",
"skew = SkewT()\n",
"\n",
"# 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",
"skew.ax.set_xlim(-40, 60)\n",
"\n",
"# Calculate LCL height and plot as black dot\n",
2018-09-06 12:12:07 -06:00
"lcl_pressure, lcl_temperature = lcl(p[0], T[0], Td[0])\n",
"skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='black')\n",
2018-09-05 15:52:38 -06:00
"\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",
"# An example of a slanted line at constant T -- in this case the 0 isotherm\n",
"l = skew.ax.axvline(0, color='c', linestyle='--', linewidth=2)\n",
"\n",
"# Draw hodograph\n",
"ax_hod = inset_axes(skew.ax, '40%', '40%', loc=3)\n",
"h = Hodograph(ax_hod, component_range=80.)\n",
"h.add_grid(increment=20)\n",
"h.plot_colormapped(u, v, spd)\n",
"\n",
"# Show the plot\n",
2018-09-06 12:12:07 -06:00
"plt.show()\n",
"\n"
2018-09-05 15:52:38 -06:00
]
}
],
"metadata": {
"kernelspec": {
2018-09-06 12:12:07 -06:00
"display_name": "Python 3",
2018-09-05 15:52:38 -06:00
"language": "python",
2018-09-06 12:12:07 -06:00
"name": "python3"
2018-09-05 15:52:38 -06:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
2018-09-06 12:12:07 -06:00
"version": 3
2018-09-05 15:52:38 -06:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
2018-09-06 12:12:07 -06:00
"pygments_lexer": "ipython3",
"version": "3.6.6"
2018-09-05 15:52:38 -06:00
}
},
"nbformat": 4,
2018-09-06 12:12:07 -06:00
"nbformat_minor": 1
2018-09-05 15:52:38 -06:00
}