python-awips/examples/notebooks/NEXRAD_Level_3_Plot_with_Matplotlib.ipynb

159 lines
69 KiB
Text
Raw Normal View History

2016-03-15 20:27:25 -05:00
{
"cells": [
{
"cell_type": "code",
2016-03-16 17:21:46 -05:00
"execution_count": 23,
2016-03-15 20:27:25 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2016-03-16 17:21:46 -05:00
"using time 2016-03-16 21:13:53\n",
2016-03-15 20:27:25 -05:00
"buffer by 60\n",
2016-03-16 17:21:46 -05:00
"using range (Mar 16 16 21:12:53 , Mar 16 16 21:14:53 )\n",
"found 94 2016-03-16 21:13:53\n",
"found 99 2016-03-16 21:13:53\n"
2016-03-15 20:27:25 -05:00
]
},
{
"data": {
2016-03-16 17:21:46 -05:00
"image/png": "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\nlFWjQi4Neo9sLc6L6jG
2016-03-15 20:27:25 -05:00
"text/plain": [
2016-03-16 17:21:46 -05:00
"<matplotlib.figure.Figure at 0x7fd249aa8990>"
2016-03-15 20:27:25 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"from awips import ThriftClient, RadarCommon\n",
"\n",
"from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange\n",
"from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.radar.request import GetRadarDataRecordRequest\n",
"\n",
"from datetime import datetime\n",
"from datetime import timedelta\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from numpy import ma\n",
"\n",
"# use metpy for color table\n",
"from metpy.plots import ctables\n",
"\n",
"# Set EDEX server and radar site\n",
"edex = \"edex-cloud.unidata.ucar.edu\"\n",
"site = \"kftg\"\n",
"\n",
"DataAccessLayer.changeEDEXHost(edex)\n",
"\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"radar\")\n",
"request.setLocationNames(site)\n",
"\n",
"datatimes = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"# Get last available time\n",
"timerange = datatimes[-1].validPeriod\n",
"dateTimeStr = str(datatimes[-1])\n",
"\n",
"# Buffer length in seconds\n",
"buffer = 60\n",
"dateTime = datetime.strptime(dateTimeStr, \"%Y-%m-%d %H:%M:%S\")\n",
"beginRange = dateTime - timedelta(0, buffer)\n",
"endRange = dateTime + timedelta(0, buffer)\n",
"timerange = TimeRange(beginRange, endRange)\n",
"\n",
"print \"using time\",dateTimeStr\n",
"print \"buffer by\",buffer\n",
"print \"using range\",timerange\n",
"\n",
"client = ThriftClient.ThriftClient(edex)\n",
"request = GetRadarDataRecordRequest()\n",
"request.setRadarId(site)\n",
"request.setPrimaryElevationAngle(\"0.5\")\n",
"request.setTimeRange(timerange)\n",
"\n",
"fig, axes = plt.subplots(1, 2, figsize=(15, 8))\n",
"for v, ctable, ax in zip((94, 99), ('NWSReflectivity', 'NWSVelocity'), axes):\n",
" request.setProductCode(v)\n",
" response = client.sendRequest(request)\n",
" if response.getData():\n",
" for record in response.getData():\n",
" idra = record.getHdf5Data()\n",
" rdat,azdat,depVals,threshVals = RadarCommon.get_hdf5_data(idra)\n",
" dim = rdat.getDimension()\n",
" yLen,xLen = rdat.getSizes()\n",
" array = rdat.getByteData()\n",
" \n",
" # get data for azimuth angles if we have them.\n",
" if azdat :\n",
" azVals = azdat.getFloatData()\n",
" az = np.array(RadarCommon.encode_radial(azVals))\n",
" dattyp = RadarCommon.get_data_type(azdat)\n",
" az = np.append(az,az[-1])\n",
" \n",
" print \"found\",v,record.getDataTime()\n",
"\n",
" header = RadarCommon.get_header(record, format, xLen, yLen, azdat, \"description\")\n",
" rng = np.linspace(0, xLen, xLen + 1)\n",
" xlocs = rng * np.sin(np.deg2rad(az[:, np.newaxis]))\n",
" ylocs = rng * np.cos(np.deg2rad(az[:, np.newaxis]))\n",
" multiArray = np.reshape(array, (-1, xLen))\n",
" data = ma.array(multiArray)\n",
" data[data==0] = ma.masked\n",
"\n",
" # Plot the data\n",
" norm, cmap = ctables.registry.get_with_steps(ctable, 16, 16)\n",
" ax.pcolormesh(xlocs, ylocs, data, norm=norm, cmap=cmap)\n",
" ax.set_aspect('equal', 'datalim')\n",
" \n",
" multp = 100*(2*xLen/460)\n",
" ax.set_xlim(-multp,multp)\n",
" ax.set_ylim(-multp,multp)\n",
" # This is setting x/ylim on gate/pixel and not km\n",
"\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n"
]
}
],
"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
}