python-awips/examples/notebooks/Precip_Accumulation_Region_of_Interest.ipynb

706 lines
264 KiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name=\"top\"></a>\n",
"<div style=\"width:1000 px\">\n",
"\n",
"<div style=\"float:right; width:98 px; height:98px;\">\n",
"<img src=\"https://docs.unidata.ucar.edu/images/logos/unidata_logo_vertical_150x150.png\" alt=\"Unidata Logo\" style=\"height: 98px;\">\n",
"</div>\n",
"\n",
"# Precipitation Accumulation Region of Interest\n",
"**Python-AWIPS Tutorial Notebook**\n",
"\n",
"<div style=\"clear:both\"></div>\n",
"</div>\n",
"\n",
"---\n",
"\n",
"<div style=\"float:right; width:250 px\"><img src=\"../images/precip_roi_preview.png\" alt=\"Colorized Precipation Accumulation with Identified Region of Interest\" style=\"height: 300px;\"></div>\n",
"\n",
"\n",
"# Objectives\n",
"\n",
"* Access the model data from an EDEX server and limit the data returned by using model specific parameters\n",
"* Calculate the total precipitation over several model runs\n",
"* Create a colorized plot for the continental US of the accumulated precipitation data\n",
"* Calculate and identify area of highest of precipitation\n",
"* Use higher resolution data to draw region of interest\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"toc": true
},
"source": [
"<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
"<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Imports\" data-toc-modified-id=\"Imports-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Imports</a></span></li><li><span><a href=\"#Initial-Setup\" data-toc-modified-id=\"Initial-Setup-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Initial Setup</a></span><ul class=\"toc-item\"><li><span><a href=\"#Geographic-Filter\" data-toc-modified-id=\"Geographic-Filter-2.1\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Geographic Filter</a></span></li><li><span><a href=\"#EDEX-Connection\" data-toc-modified-id=\"EDEX-Connection-2.2\"><span class=\"toc-item-num\">2.2&nbsp;&nbsp;</span>EDEX Connection</a></span></li><li><span><a href=\"#Refine-the-Request\" data-toc-modified-id=\"Refine-the-Request-2.3\"><span class=\"toc-item-num\">2.3&nbsp;&nbsp;</span>Refine the Request</a></span></li><li><span><a href=\"#Get-Times\" data-toc-modified-id=\"Get-Times-2.4\"><span class=\"toc-item-num\">2.4&nbsp;&nbsp;</span>Get Times</a></span></li></ul></li><li><span><a href=\"#Function:-calculate_accumulated_precip()\" data-toc-modified-id=\"Function:-calculate_accumulated_precip()-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Function: calculate_accumulated_precip()</a></span></li><li><span><a href=\"#Fuction:-make_map()\" data-toc-modified-id=\"Fuction:-make_map()-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Fuction: make_map()</a></span></li><li><span><a href=\"#Get-the-Data!\" data-toc-modified-id=\"Get-the-Data!-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>Get the Data!</a></span></li><li><span><a href=\"#Plot-the-Data!\" data-toc-modified-id=\"Plot-the-Data!-6\"><span class=\"toc-item-num\">6&nbsp;&nbsp;</span>Plot the Data!</a></span><ul class=\"toc-item\"><li><span><a href=\"#Create-CONUS-Image\" data-toc-modified-id=\"Create-CONUS-Image-6.1\"><span class=\"toc-item-num\">6.1&nbsp;&nbsp;</span>Create CONUS Image</a></span></li><li><span><a href=\"#Create-Region-of-Interest-Image\" data-toc-modified-id=\"Create-Region-of-Interest-Image-6.2\"><span class=\"toc-item-num\">6.2&nbsp;&nbsp;</span>Create Region of Interest Image</a></span></li></ul></li><li><span><a href=\"#High-Resolution-ROI\" data-toc-modified-id=\"High-Resolution-ROI-7\"><span class=\"toc-item-num\">7&nbsp;&nbsp;</span>High Resolution ROI</a></span><ul class=\"toc-item\"><li><span><a href=\"#New-Data-Request\" data-toc-modified-id=\"New-Data-Request-7.1\"><span class=\"toc-item-num\">7.1&nbsp;&nbsp;</span>New Data Request</a></span></li><li><span><a href=\"#Calculate-Data\" data-toc-modified-id=\"Calculate-Data-7.2\"><span class=\"toc-item-num\">7.2&nbsp;&nbsp;</span>Calculate Data</a></span></li><li><span><a href=\"#Plot-ROI\" data-toc-modified-id=\"Plot-ROI-7.3\"><span class=\"toc-item-num\">7.3&nbsp;&nbsp;</span>Plot ROI</a></span></li></ul></li><li><span><a href=\"#See-Also\" data-toc-modified-id=\"See-Also-8\"><span class=\"toc-item-num\">8&nbsp;&nbsp;</span>See Also</a></span><ul class=\"toc-item\"><li><span><a href=\"#Related-Notebooks\" data-toc-modified-id=\"Related-Notebooks-8.1\"><span class=\"toc-item-num\">8.1&nbsp;&nbsp;</span>Related Notebooks</a></span></li><li><span><a href=\"#Additional-Documentation\" data-toc-modified-id=\"Additional-Documentation-8.2\"><span class=\"toc-item-num\">8.2&nbsp;&nbsp;</span>Additional Documentation</a></span></li></ul></li></ul></div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imports\n",
"\n",
"The imports below are used throughout the notebook. Note the first import is coming directly from python-awips and allows us to connect to an EDEX server. The subsequent imports are for data manipulation and visualization."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import cartopy.crs as ccrs\n",
"import matplotlib.pyplot as plt\n",
"from metpy.units import units\n",
"import numpy as np\n",
"from shapely.geometry import Point, Polygon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Initial Setup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Geographic Filter\n",
"\n",
"By defining a bounding box for the Continental US (CONUS), were able to optimize the data request sent to the EDEX server."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"conus=[-125, -65, 25, 55]\n",
"conus_envelope = Polygon([(conus[0],conus[2]),(conus[0],conus[3]),\n",
" (conus[1],conus[3]),(conus[1],conus[2]),\n",
" (conus[0],conus[2])])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### EDEX Connection\n",
"\n",
"First we establish a connection to Unidatas public EDEX server. With that connection made, we can create a [new data request object](http://unidata.github.io/python-awips/api/IDataRequest.html) and set the data type to **grid**, and use the geographic envelope we just created."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"DataAccessLayer.changeEDEXHost(\"edex-beta.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest(\"grid\", envelope=conus_envelope)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Refine the Request\n",
"\n",
"Here we specify which model we're interested in by setting the *LocationNames*, and the specific data we're interested in by setting the *Levels* and *Parameters*."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"request.setLocationNames(\"GFS1p0\")\n",
"request.setLevels(\"0.0SFC\")\n",
"request.setParameters(\"TP\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get Times\n",
"\n",
"We need to get the available times and cycles for our model data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Function: calculate_accumulated_precip()\n",
"\n",
"Since we'll want to calculate the accumulated precipitation of our data more than once, it makes sense to create a function that we can call instead of duplicating the logic.\n",
"\n",
"This function cycles through all the grid data responses and adds up all of the rainfall to produce a numpy array with the total ammount of rainfall for the given data request. It also finds the maximum rainfall point in x and y coordinates."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def calculate_accumulated_precip(dataRequest, forecastRun):\n",
"\n",
" for i, tt in enumerate(forecastRun):\n",
" response = DataAccessLayer.getGridData(dataRequest, [tt])\n",
" grid = response[0]\n",
" if i>0:\n",
" data += grid.getRawData()\n",
" else:\n",
" data = grid.getRawData()\n",
" data[data <= -9999] = 0\n",
" print(data.min(), data.max(), grid.getDataTime().getFcstTime()/3600)\n",
"\n",
" # Convert from mm to inches\n",
" result = (data * units.mm).to(units.inch)\n",
" \n",
" ii,jj = np.where(result==result.max())\n",
" i=ii[0]\n",
" j=jj[0]\n",
"\n",
" return result, i, j"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fuction: make_map()\n",
"\n",
"This function creates the basics of the map we're going to plot our data on. It takes in a bounding box to determine the extent and then adds coastlines for easy frame of reference."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(20, 14),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" return fig, ax"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get the Data!\n",
"\n",
"Access the data from the DataAccessLayer interface using the *getGridData* function. Use that data to calculate the accumulated rainfall, the maximum rainfall point, and the region of interest bounding box."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0 18.75 6.0\n",
"0.0 24.5625 12.0\n",
"0.0 40.875 18.0\n",
"0.0 65.125 24.0\n",
"0.0 76.9375 30.0\n",
"0.0 80.3125 36.0\n",
"0.0 80.3125 42.0\n",
"0.0 80.3125 48.0\n",
"0.0 80.3125 54.0\n",
"0.0 80.3125 60.0\n",
"0.0 80.9375 66.0\n",
"0.0 84.375 72.0\n",
"0.0 92.0 78.0\n",
"0.0 95.5 84.0\n",
"0.0 95.75 90.0\n",
"0.0 96.3125 96.0\n",
"0.0 96.375 102.0\n",
"0.0 96.375 108.0\n",
"0.0 96.4375 114.0\n",
"0.0 96.625 120.0\n",
"0.0 96.625 126.0\n",
"0.0 96.625 132.0\n",
"0.0 97.4375 138.0\n",
"0.0 102.625 144.0\n",
"0.0 104.4375 150.0\n",
"0.0 109.25 156.0\n",
"0.0 109.625 162.0\n",
"0.0 113.25 168.0\n",
"0.0 127.625 174.0\n",
"0.0 142.8125 180.0\n",
"0.0 156.1875 186.0\n",
"0.0 156.25 192.0\n",
"0.0 156.75 198.0\n",
"0.0 157.1875 204.0\n",
"0.0 157.1875 210.0\n",
"0.0 157.1875 216.0\n",
"0.0 157.25 222.0\n",
"0.0 161.4375 228.0\n",
"0.0 164.6875 234.0\n",
"0.0 165.0 240.0\n",
"0.0 inch 6.496062755584717 inch\n",
"POINT (-84 35)\n"
]
}
],
"source": [
"## get the grid response from edex\n",
"response = DataAccessLayer.getGridData(request, [fcstRun[-1]]) \n",
"## take the first result to get the location information from\n",
"grid = response[0]\n",
"\n",
"## get the location coordinates and create a bounding box for our map\n",
"lons, lats = grid.getLatLonCoords()\n",
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"fcstHr = int(grid.getDataTime().getFcstTime()/3600)\n",
"\n",
"## calculate the total precipitation\n",
"tp_inch, i, j = calculate_accumulated_precip(request, fcstRun)\n",
"print(tp_inch.min(), tp_inch.max())\n",
"\n",
"## use the max points coordinates to get the max point in lat/lon coords\n",
"maxPoint = Point(lons[i][j], lats[i][j])\n",
"inc = 3.5\n",
"## create a region of interest bounding box\n",
"roi_box=[maxPoint.x-inc, maxPoint.x+inc, maxPoint.y-inc, maxPoint.y+inc]\n",
"roi_polygon = Polygon([(roi_box[0],roi_box[2]),(roi_box[0],roi_box[3]), \n",
" (roi_box[1],roi_box[3]),(roi_box[1],roi_box[2]),(roi_box[0],roi_box[2])])\n",
"\n",
"print(maxPoint)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plot the Data!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create CONUS Image\n",
"\n",
"Plot our data on our CONUS map."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<cartopy.mpl.feature_artist.FeatureArtist at 0x7f2ae15dd1d0>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABUoAAAQJCAYAAAAQBDLiAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XWcE3f+x/HXJNlk3X1x9+JOkdJChVJ397vSq17dlerVnTrtXYUeNQoUCqVocXdYYGHdJckmmd8f9Ld3HLSwsEMIvJ+Pxz5gk5nPvGc2ySaf/c53DNM0TURERERERERERESOYbZgBxAREREREREREREJNjVKRURERERERERE5JinRqmIiIiIiIiIiIgc89QoFRERERERERERkWOeGqUiIiIiIiIiIiJyzFOjVERERERERERERI55apSKiIiIiIiIiIjIMc9xoAu63W68Xq+VWUREREREREREREQanNPpJDw8/E+XOaBGqdvtpnnz5uTm5jZIMBEREREREREREZHDJT09nS1btvxps/SAGqVer5fc3Fy2b99ObGxsgwUUEREREflfX3/9NVdccQUAb775JhdeeKFl2/J6vQwePBi73c7PP/9MWFiYZdsSEQkVPp+PTz75hCeffJKioiIuueQSLrvsMrp3745hGMGOJxLynnrqKcaOHUtiYiItW7bkq6++IjY2lttvv52PP/6YX375hfbt27Np0yYefvhhbrzxRvr27XvA9YuKinjvvfd45513yMvLo127dhx//PH07duXDh060KJFC1wu10Hn9/v9tG/fnvbt2/P1119jsx35M3uWl5fTuHFjvF7vnzZKDdM0zQMpFhcXR1lZmRqlIiIiImKpRx55hIcffhjDMNi2bRuNGjWydHuLFi2iT58+PPzww9x///2WbktEJJRUV1fz8ssv88orr7Bz5046dOjARRddxKhRo+jcubOapiIHwTRNunXrxrJly0hJSWHt2rUkJiYCUFNTQ69evbDb7Xz77bd07dqVkpISOnTowKpVq/60bkFBAd988w0TJkzgp59+wmazcemll/K3v/2NTp06Nfh++Hw+7HZ7yLwOHGhv88hv+YqIiIjIMWXixIkA3HPPPZY3SQF69OjBnXfeyaOPPsrKlSst356ISKiIjIzk7rvvZtu2bfz444906dKFsWPHctxxx9G0aVP++te/MmnSJHw+X7CjioSMyZMns2zZMgDuvPPOuiYpQEREBOPHj2fFihWMHDmSiooK3n33XVavXs3q1av3qlVdXc1bb73FsGHDSE9P59prr6WyspJnnnmG7du38/bbb1vSJAVwOBwh0yStD40oFREREZEjyvPPP8/48eNZsGABDscBX3v0kLjdbrp3705UVBRz5849bNsVEQk1Ho+HWbNm8d133/Htt9+yefNmMjMzufLKK7n66qtp3rx5sCOKHNGGDBnCzJkzSU1NZfPmzURFRe1x/7hx47jmmmsAuO6663j55ZdJTU3ltttu46GHHgJ2n1r/2muv8corr1BcXMzw4cM5++yzGT16NGlpaYd9n0LBgfY21SgVEREREQHmz59P//79efrpp7njjjuCHUdE5IhnmiZLly7lnXfeYfz48bjdbp544gluvfVW7HZ7sOOJHHFmzpzJkCFDAHjhhRe49dZb6+4LBALceeedPP/88wBccMEFfPjhhzidTs4991xyc3P5+eefuffee3nttdcwTZOrrrqK2267jRYtWgRjd0KKGqUiIiIiIvV000038dFHH7FhwwZSU1ODHUdEJGRUVVXx0EMP8cILL9CxY0eeeOIJRo0adVSemityMMrKyujVq1fde4ytW7cSEREB7H7+9OvXjxUrVgDwj3/8g5tvvrnu+XPdddexZMkSTjzxRJ599lnuuecebrrpJlJSUoK2P6FGc5SKiIiIiNTTww8/jM1m4+GHHw52FBGRkBIVFcVzzz3HvHnzSElJYfTo0QwYMIBffvkl2NFEgm7FihV1TVKAZ555pq5JCnDmmWfWNUlnzpzJLbfcsscfGZxOJ2VlZbz66qvccccdPProo2qSWkSNUhERERGR3yUlJXH//ffz9ttv7/OiCSIi8ud69+7NtGnTmDJlCl6vl8GDB3PKKaewdOnSYEcTOezWrVvHk08+SZ8+feqapOeffz6XXXbZHss9+eSTfPTRR5SVlXH88cfvVSczM5MNGzZQUVHBeeedd1iyH6t06r2IiIiIyH/xeDy0bt2aYcOG8cEHHwQ7johIyDJNk6+++or77ruP9evXc8EFFzB27FiaNm0a7GgiDcrv97N161ZWr17NmjVrWLNmDXPmzGH9+vV7LHfOOefw7rvvEhcXV6/6V199Ne+99x6NGzdm8+bNuujkQdAcpSIiIiIiB+nZZ5/l/vvvJzs7m/T09GDHEREJaT6fjw8++ICHHnoI0zSZPn067dq1C3YskYNmmibz5s1jypQpTJkyhTlz5vzp8n369OGRRx5hxIgRB7W9fv36MW/ePN5//32uuOKKg6pxrFOjVERERETkIJWUlNC4cWNuv/12HnnkkWDHERE5KuTl5TF8+HDy8/OZPn06HTt2DHYkkXqbNGkS1157LTk5OXvdFxMTw4ABA2jevDnNmjWjWbNmtG7dmq5dux7Shc0WL17MhAkTeOSRR7Db7YcS/5ilRqmIiIiIyCEYM2YMn3/+Odu2bSM8PDzYcUREjgoFBQUMHz6cnTt3Mm3aNLp06RLsSCIHLD8/n7S0tLrve/bsyamnnsrIkSPp1auXmphHMDVKRUREREQOwYYNG2jTpg3vvvsuV199dbDjiIgcNYqKijjxxBPJzs7mp59+olu3bsGOJHJAfD4fjz/+OG3atOGkk04iOTk52JHkAKlRKiIiIiJyiM4880wWL17M2rVriYiICHYcEZGjRklJCSNGjGDDhg1MnTqVnj17BjuSiBzFDrS3aTuMmUREREREQsrTTz/Nrl27eOKJJ4IdRUTkqJKQkMDUqVNp164dw4cPZ9GiRcGOJCKiRqmIiIiIyB9p06YNDzzwAGPHjmX+/PnBjiMiclSJi4tj8uTJtG3bltGjR5ObmxvsSCJyjNOp9yIiIiIif8Ln89G/f3/KyspYsmQJkZGRwY4kInJU2blzJz179qR58+b8/PPPOJ3OYEcSkaOMTr0XEREREWkADoeDjz76iG3btnHPPfcEO46IHKVyc3P58ccfCQQCwY5y2GVmZvLVV18xZ84cvvjii2DHEZFjmBqlIiIiIiL70a5dO8aOHcvLL7/MtGnTgh1HRI4yM2fOpG3btpx88sm8++67wY4TFP369WPo0KG88MIL+P3+YMcRkWOUGqUiIiIiIgfgpptuYujQoVx55ZWUlZUFO46IHCUCgQBnn302WVlZ2O12fv3112BHCponnniCxYsXH7PNYhEJPjVKRUREREQOgM1m4/3336e0tJSbb7452HFE5CixePFiioqKWLNmDX6/nxYtWgQ7UtD069ePK6+8knvvvZfCwsJgxxGRY5AapSIiIiIiB6hp06a8+OKLfPjhh8ybNy/YcUTkKFBaWlr3/2nTpvHAAw8EL8wRYOzYsQQCAe69995gRxGRY5Cuei8iIiIiUg+BQICOHTvSqlUrvv3222DHEZGjwEsvvURERATXXXddsKMcEV577TVuuukm5s2bR+/evYMdR0SOAgfa21SjVERERESknt555x2uv/56CgoKSEpKCnYcEZGjit/vp0ePHsTHxzNjxoxgxxGRo8CB9jZ16r2IiIiISD2dcMIJmKbJ/Pnzgx1FROSoY7fbefTRR5k5c6YapSJyWDmCHUBEREREJNRs2bIFgOTk5MOyPdM0yc7OZvny5eTn51NUVFT3VVtbS0ZGBo0aNSIrK6vuKz09HYdDb/dFJDSNGjWKbt268dRTTzFkyJBgxxGRY4ROvRcRERERqYdAIMCAAQPweDwsXLgQm61hT9IKBAJs3LiRxYsX7/FVUlJSt0xCQgJJSUkkJiYSFhbGzp07ycnJwev11i1js9k47rjjOP300zn99NPp1q0bhmE0aFYRESu9+eabjBkzhvz
"text/plain": [
"<Figure size 2000x1400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cmap = plt.get_cmap('rainbow')\n",
"fig, ax = make_map(bbox=bbox)\n",
"cs = ax.pcolormesh(lons, lats, tp_inch, cmap=cmap)\n",
"cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')\n",
"cbar.set_label(grid.getLocationName() + \" Total accumulated precipitation in inches, \" \\\n",
" + str(fcstHr) + \"-hr fcst valid \" + str(grid.getDataTime().getRefTime()))\n",
"\n",
"ax.scatter(maxPoint.x, maxPoint.y, s=300,\n",
" transform=ccrs.PlateCarree(),marker=\"+\",facecolor='black')\n",
"\n",
"ax.add_geometries([roi_polygon], ccrs.PlateCarree(), facecolor='none', edgecolor='white', linewidth=2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create Region of Interest Image\n",
"\n",
"Now crop the data and zoom in on the region of interest (ROI) to create a new plot."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f2ae07b87d0>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2000x1400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# cmap = plt.get_cmap('rainbow')\n",
"fig, ax = make_map(bbox=roi_box)\n",
"\n",
"cs = ax.pcolormesh(lons, lats, tp_inch, cmap=cmap)\n",
"cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')\n",
"cbar.set_label(grid.getLocationName() + \" Total accumulated precipitation in inches, \" \\\n",
" + str(fcstHr) + \"-hr fcst valid \" + str(grid.getDataTime().getRefTime()))\n",
"\n",
"ax.scatter(maxPoint.x, maxPoint.y, s=300,\n",
" transform=ccrs.PlateCarree(),marker=\"+\",facecolor='black')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## High Resolution ROI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### New Data Request\n",
"\n",
"To see the region of interest more clearly, we can redo the process with a higher resolution model (GFS20 vs. GFS1.0)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"roiRequest = DataAccessLayer.newDataRequest(\"grid\", envelope=conus_envelope)\n",
"roiRequest.setLocationNames(\"GFS20\")\n",
"roiRequest.setLevels(\"0.0SFC\")\n",
"roiRequest.setParameters(\"TP\")\n",
"\n",
"roiCycles = DataAccessLayer.getAvailableTimes(roiRequest, True)\n",
"roiTimes = DataAccessLayer.getAvailableTimes(roiRequest)\n",
"roiFcstRun = DataAccessLayer.getForecastRun(roiCycles[-1], roiTimes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculate Data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<awips.dataaccess.PyGridData.PyGridData object at 0x7f2ae07b77f0>]\n",
"0.0 20.5625 3.0\n",
"0.0 28.8125 6.0\n",
"0.0 32.0625 9.0\n",
"0.0 32.25 12.0\n",
"0.0 42.125 15.0\n",
"0.0 52.8125 18.0\n",
"0.0 77.625 21.0\n",
"0.0 116.8125 24.0\n",
"0.0 143.5 27.0\n",
"0.0 157.8125 30.0\n",
"0.0 175.25 33.0\n",
"0.0 177.1875 36.0\n",
"0.0 177.1875 39.0\n",
"0.0 177.1875 42.0\n",
"0.0 177.1875 45.0\n",
"0.0 177.1875 48.0\n",
"0.0 177.1875 51.0\n",
"0.0 177.1875 54.0\n",
"0.0 177.1875 57.0\n",
"0.0 177.1875 60.0\n",
"0.0 177.1875 63.0\n",
"0.0 177.1875 66.0\n",
"0.0 177.8125 69.0\n",
"0.0 178.1875 72.0\n",
"0.0 178.375 75.0\n",
"0.0 178.6875 78.0\n",
"0.0 188.375 81.0\n",
"0.0 188.5 84.0\n",
"0.0 188.6875 90.0\n",
"0.0 189.1875 96.0\n",
"0.0 189.375 102.0\n",
"0.0 189.4375 108.0\n",
"0.0 189.4375 114.0\n",
"0.0 189.75 120.0\n",
"0.0 189.75 126.0\n",
"0.0 189.75 132.0\n",
"0.0 189.9375 138.0\n",
"0.0 191.125 144.0\n",
"0.0 191.9375 150.0\n",
"0.0 196.375 156.0\n",
"0.0 196.75 162.0\n",
"0.0 196.75 168.0\n",
"0.0 196.8125 174.0\n",
"0.0 197.625 180.0\n",
"0.0 197.75 186.0\n",
"0.0 198.1875 192.0\n",
"0.0 199.75 198.0\n",
"0.0 208.375 204.0\n",
"0.0 211.125 210.0\n",
"0.0 211.375 216.0\n",
"0.0 211.375 222.0\n",
"0.0 211.4375 228.0\n",
"0.0 211.625 234.0\n",
"0.0 236.875 240.0\n"
]
}
],
"source": [
"roiResponse = DataAccessLayer.getGridData(roiRequest, [roiFcstRun[-1]]) \n",
"print(roiResponse)\n",
"roiGrid = roiResponse[0]\n",
"\n",
"roiLons, roiLats = roiGrid.getLatLonCoords()\n",
"\n",
"roi_data, i, j = calculate_accumulated_precip(roiRequest, roiFcstRun)\n",
"\n",
"roiFcstHr = int(roiGrid.getDataTime().getFcstTime()/3600)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot ROI"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f2ae066b890>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABFUAAAQJCAYAAAAHLzdHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAvsFJREFUeJzs/XmULOl533c+EZERGblW1nb3vn17QTcAAiA2EaBMEiJE0CRFieRQI9EWrdGIHlK7RmdkSbZHkg8ly8f2WLYlWRQ9Y5tjSqREWdJY3CxxscFF4IZ9a6DR3bf79l3rVlVW5RYZkRExf1z0crtryScr34zt+zkHh2AjI/K5fasyI37xvs9jpWmaCgAAAAAAAFTsrAsAAAAAAAAoIkIVAAAAAACABRCqAAAAAAAALIBQBQAAAAAAYAGEKgAAAAAAAAsgVAEAAAAAAFgAoQoAAAAAAMACalkXACxTEAQShmHWZQAAAABQ8DxPfN/PugxAjVAFpREEgfR6j8l0eifrUgAAAAAoXLhwQV544QWCFRQOoQpKIwxDmU7vyEe+5brUat1jX5c4q6nHC1bzPiYlhjcIzjyz50+c1OwbiEhs+s9g+O9gFf+ORMz/XUee2T9HUjP/7yky/O8ods3+GSLD5xdZ7M/QOtB96Jv+9yRi/t/VzDd7/qCRGD2/iMi4Y/Y9Jq3Y6PlFRKYr+PfUaJr9c/i+2T9D058ZPb+ISL2u/3e0u1/XvYdn9t9Twzf/8+rXzf9dNE/4u4gHQ/nM131IwjAkVEHhEKqgdGq1rrhutqFK4qQSG/4+8IeW2TcQ8/+uLNfs+VcRGJj/M5g+v/l/RzPP/JdNajhUWcWNdmI4VBHDf4bE8N+BiCz0ZwiUn8X+yHy7OdP/rhLDoYq9grDAMvweluEwQkREGubfwzIcDlmGQxW7Yf5G3l4gVNlu614/HJm9GLBXEKo4hgOu5gpCGyArhCpAASWOyHjN/A3MKoIb4KxMr1JBdYR+KuEKbl4aA+YElF2wgkAF+eC5iWz0pqpj9vq6lTAA8o1QBcCRVhHceBNCGwDVEjQTCZq6p//rd7lcA8pEG8JMAj4DgDzjNxRAJhJHJGibDm2Mnh4AVmL/vG7ZfFvZRwbF1FxBXxhkr1mfLbR1ZveAviTAqhCqACilmZcu1By1ecDqGaye6Sa1qI5FVsJs3TbcHAqFZLpJLczaXNNNTBhPuS0EFsVvDwC8jnbLE1uYUASraLSL4rp/MVK9npUwKIpFJv9UUcePpOPrPgfuHjQMVQMUD6EKACzowWoYszer/pCGlgDyY5GVMItoDAluyq61gsk/MOf8mm6P9SBgRRzKi1AFAHIqdkRGa2ZvXhpMeAKQM0EjVk/PWd9hDx2QV+16KO16eOJrImu0omqA5SNUAYCKit1Uhuv6lTbtfVbPYPXKsIVpFSs8qmp/++QbtjfyJ6yEAQAsB6EKsGSJU/wLf+Akw3XdjaE/IoQBkB9+IxFpKAOuPbYuAACORqgCADAm8kQiz+zTeX/EFiacXegTiOMEG7omnjIhTK4Cz2X1GQBCFQBHSFgVjYKI3VRGPfM3wwQ3AObVbMbSbOqnzuztshpmmZj8Mx/t1B8Ab0aoAmDlCG1QJIkjMu7qgpvmISEMAJ2NTd3NbRCwGqbsmnUmJAFFQKgCAMCSaUMYNyCEwdmVoRGudupPVbUaM2k1zL7HaMJtAs7utKk/QBnwaQkAQIZmXiozz+wWJm9CaJO1MgQeqI52cybtpm6VxN1d31A1AJBvhCoAsADTN8HAsszcVGYLjCNuHrK1AA8jGMJJzm8GqtcPx9yGACgHPs0AIIdi+s4gY+Ou7gaaLUwA5tVqRNJq6HrI3N01vN8JABZEqILSmbZTiU94KssyeABYrqCZSNA0+x7NAStngCo7vzlRvb4/9AxVUh5M/gGWg1AFlbKK3gX+kNAGAJbpQWijWzmzcZdLHLyZ32ALUxU0vJk0NvSTc27vGU6HAZQSVxzAEiWOyHjNfK8NghsUQcRDQmRo77zuhqp9wJ67rDH5Zz6tBmN2Tbm4MVa9fndAc96TMPkHVUGoAhTMKoIbQhsUwUnb/ACNRVbCaBHaVEOzWfxgSDv1p6rqtVgurY9Ux9zabxmqBkCWCFUAPCRx0hWENvRGQDEk3AdjCYJGIsEC20627rgGqgGQFW0I0x/XDVUCYJkIVQCsVOyIjNbM72mv05AYQMHdv6BrItk+JAUEyqLhzqSxpls1dPuAlTBAFghVAJROaosELd1qG39ECIPVM904GxXSiGWo7EnSvkvjI6BMLq7pVsIMp3wGAMtAqAIAog9hakwhRAHM6DuDEwzP65pI1gZcNgJl0fOm0vOmqmNeHnQMVQMUG9+OAKD0YDS32fdwA1bOAMgPr56ImJ7kMWL70mnKMPmn1eCpRFFd6QxUr++H9IRBNRCqAEDOPAhtzK8w8Og7gyUwPTUH1dBsxgtNzrm/w/YFrF69VvwpT6Y1nUiaigAtjHRbl4A8IVQBgApK6DuDgiC0wUm2tnWrZ4ZDLn1PUoZxyg2v+H8GAMXCNwsAYC7aEMaJCGEA5EerMVNvn7m74xuqBjhewyUYAoqEUAUokITt5iiIsJGKNMxuYWL7EpaBlTA4yfntQPX6wcg1VAkAIK8IVQAAhTP1E5mu4AFy65AkE8B8ep1Qeh3ddqQbd1qGqgEArAqhCgAAR4jdVA43dUuwu7t8reJhQYOVMDjeIxd0zTn3DpimAgB5w9UfAABLog1hmgNWwmAJGkwiqYJeK5ReS7cS5vlbHUPVVBeTfwC8EaEKgFJJ7awrAOYT1lMJ62abEbYPCG2AKnv80kD1+nv9hqFKkCc9b5p1CUCpEKoAAFBCQTNZqAnr1m0abeJhXr34W5i0U3+qqOcH0ruga8y7iJsHbePvUWRM/gGKh1AFAAC86v7FSPV6VsMAmFfXC6W7vac65os7G4aqgSlNR/c9AhQdoQpKJ2ilUvOOHuVa021FBkopYYsUlmTR1TAahDbl12zSowLHe5syhLl+0DVUCQAcjVAFlZE4qYSGtwrXQsvsGwBAhYStWPZauhvujVueoWoA5F3dnsnT67oQ5kv7rIQBcDaEKsCSxI5I3Dh6hcyyuIQ2KIDQ8O8BcJK9S7olic0+l0JAlWlDmOuDNUOVACgqriSAgkhtkdA3f7NaYxssgIrw6onMzutCmNpdVsLgzXod9hdXgWsl8pbuvuqYZw/XDVUDIC8IVQC8KnFSCQ23L3AiVtsAKC5tCCOHXGpljck/yJI2hHl50jFUCQBT+KYHsDKRJxId00T4OP6IEAarF7tsYcLZ1b1E6lvmVzCMRjTzLbteq/grYbpe8f8MptWsRK41D9THXR+zJQnIEqEKgFwLWrqb2/qEEAb5F9YJbbAcfj0Wv65r5ru7xxYmoEy0QUx/5huqBKgmQhUApZE6qQTtFfSdoWEwcs70mGMU2+aGbsXAYMTlYtn1/CDrErAiTTuUpnLV0K2QMdXASfiWBACFmSsyM7w1hGbBAPKi2Yyl2dSthLm7UzdUDYAsXPIOVa/vxw1DlQD5RKgCADky81KZGV6Z77FFCkvAahgc5/z2VPV6VsIA5WFLKhvOWHXMXtw0VA2wGnyLoRISh/4FgIjI1E9kqtxK3dmnCSZWL2zpVkegmNqNSNoNs8vzDkeu0fMjH+o2U56KasMZy1QZxAB5QqgCADjRYF13c1sPbEOVAIDORmcqGx3dyhkRket32gaqqS4m/wAoM0IVAMDSRPVUIuUkkkW4U7Yw4Wy8OtuXcLxrF4aq1/dHTFQqO9fiMwPA0QhVAIgIW6RQHEEzkUC5/ZotTABM2WyOZbOp27rw3E7PTDHACZo2K4YAEwhVAAClp93C1ByyhQlnU/d4qo3jPbHdV71+d0wjz7KrsRIGKCxCFQArEbEyGgXxYCWM2Yvb9gErZ3B2/gq22iF7G14gG16gOubZ/oahaoDj2cKqZ1QToQoAACsU1hPZO2c2tGkOCW2AKntLb0/1+h3tnkoAwKsIVQBgTjOmcqIAZo1EDhv60Ka7ww84HtZsshKmCnrORHqtidH
"text/plain": [
"<Figure size 2000x1400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# cmap = plt.get_cmap('rainbow')\n",
"fig, ax = make_map(bbox=roi_box)\n",
"\n",
"cs = ax.pcolormesh(roiLons, roiLats, roi_data, cmap=cmap)\n",
"cbar = fig.colorbar(cs, shrink=0.7, orientation='horizontal')\n",
"cbar.set_label(roiGrid.getLocationName() + \" Total accumulated precipitation in inches, \" \\\n",
" + str(roiFcstHr) + \"-hr fcst valid \" + str(roiGrid.getDataTime().getRefTime()))\n",
"\n",
"ax.scatter(maxPoint.x, maxPoint.y, s=300,\n",
" transform=ccrs.PlateCarree(),marker=\"+\",facecolor='black')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## See Also\n",
"\n",
"### Related Notebooks\n",
"\n",
"* [Colorized Grid Data](https://unidata.github.io/python-awips/examples/generated/Colorized_Grid_Data.html)\n",
"* [Grid Levels and Parameters](https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html)\n",
"\n",
"### Additional Documentation\n",
"\n",
"**python-awips:**\n",
"* [awips.DataAccessLayer](http://unidata.github.io/python-awips/api/DataAccessLayer.html)\n",
"* [awips.PyGridData](http://unidata.github.io/python-awips/api/PyGridData.html)\n",
"\n",
"**matplotlib:**\n",
"* [matplotlib.pyplot](https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html)\n",
"* [matplotlib.pyplot.subplot](https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.subplot.html)\n",
"* [matplotlib.pyplot.pcolormesh](https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.pcolormesh.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"#top\">Top</a>\n",
"\n",
"---"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.1"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": true,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 4
}