mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-24 14:57:57 -05:00
147 lines
147 KiB
Text
147 lines
147 KiB
Text
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 37,
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\nfJL69RuetOutCf5JJxR
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x7fed6d026c90>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"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",
|
||
|
"from metpy.calc import get_wind_components, lcl, dry_lapse, parcel_profile\n",
|
||
|
"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",
|
||
|
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
|
||
|
"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",
|
||
|
" 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",
|
||
|
"# Convert \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",
|
||
|
"u, v = get_wind_components(spd, np.deg2rad(direc))\n",
|
||
|
"\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",
|
||
|
"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",
|
||
|
"# 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",
|
||
|
"plt.show()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"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"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 0
|
||
|
}
|