2025-01-23 14:31:31 -07:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python-AWIPS Tutorial Notebook"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\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": {},
"source": [
"## Table of Contents\n",
"\n",
"[1 Imports](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#imports)<br> \n",
"[2 Initial Setup](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#initial-setup)<br> \n",
" [2.1 Geographic Filter](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#geographic-filter)<br> \n",
" [2.2 EDEX Connnection](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#edex-connection)<br> \n",
" [2.3 Refine the Request](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#refine-the-request)<br> \n",
" [2.4 Get Times](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#get-times)<br> \n",
"[3 Function: calculate_accumulated_precip()](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#function-calculate-accumulated-precip)<br> \n",
"[4 Function: make_map()](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.htmlt#function-make-map)<br> \n",
"[5 Get the Data!](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#get-the-data)<br> \n",
"[6 Plot the Data!](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#plot-the-data)<br> \n",
" [6.1 Create CONUS Image](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#create-conus-image)<br> \n",
" [6.2 Create Region of Interest Image](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#create-region-of-interest-image)<br> \n",
"[7 High Resolution ROI](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#high-resolution-roi)<br> \n",
" [7.1 New Data Request](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#new-data-request)<br> \n",
" [7.2 Calculate Data](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#calculate-data)<br> \n",
" [7.3 Plot ROI](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#plot-roi)<br> \n",
"[8 See Also](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest#see-also)<br> \n",
" [8.1 Related Notebooks](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#related-notebooks)<br> \n",
" [8.2 Additional Documentation](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html#additional-documentation)<br> "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1 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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2 Initial Setup"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.1 Geographic Filter\n",
"\n",
"By defining a bounding box for the Continental US (CONUS), we’ re 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": [
"### 2.2 EDEX Connection\n",
"\n",
"First we establish a connection to Unidata’ s 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": [
2025-02-13 13:04:21 -07:00
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
2025-01-23 14:31:31 -07:00
"request = DataAccessLayer.newDataRequest(\"grid\", envelope=conus_envelope)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.3 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": [
"### 2.4 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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3 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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4 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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5 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 10.0625 6.0\n",
"0.0 21.75 12.0\n",
"0.0 35.1875 18.0\n",
"0.0 43.5 24.0\n",
"0.0 45.5625 42.0\n",
"0.0 47.9375 48.0\n",
"0.0 52.0625 54.0\n",
"0.0 56.375 60.0\n",
"0.0 86.625 66.0\n",
"0.0 92.4375 72.0\n",
"0.0 94.375 78.0\n",
"0.0 95.375 84.0\n",
"0.0 98.3125 90.0\n",
"0.0 100.125 96.0\n",
"0.0 101.6875 102.0\n",
"0.0 104.0 108.0\n",
"0.0 107.1875 114.0\n",
"0.0 115.25 120.0\n",
"0.0 129.0 126.0\n",
"0.0 136.375 132.0\n",
"0.0 141.125 138.0\n",
"0.0 145.25 144.0\n",
"0.0 147.375 150.0\n",
"0.0 5.802169\n",
"POINT (-124 42)\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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6 Plot the Data!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 6.1 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 0x13eb32340>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6MAAALbCAYAAAAPYFYEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOzdZ3gc5fX38e9s39WqF8uSLPfeO80GY9PBgE0PHUIPSUhCC0mAhBJKAqGlUEMJhN47NjbuGPfei1xk9bLaPs8L5+/Ej21ZmpW0Lr/PdeUK3plz32dmZ2bnaGbuMUzTRERERERERKQt2ZKdgIiIiIiIiBx+VIyKiIiIiIhIm1MxKiIiIiIiIm1OxaiIiIiIiIi0ORWjIiIiIiIi0uZUjIqIiIiIiEibczQ28eSTTzbLysraKhcREZEDViwWY+HChQwePDjZqYhIG4pGo6xYsQKPx0PXrl2TnY60klAoxPLly+nZsycAhmFgGAZOpxPDMJKcXesrKSmhvLycfv36YbPZqK2tpaSkhPr6egCGDh1que25c+d+bprmyXub1mgxWlZWxvfff2+5YxERkUPF5s2bOeKII/S7KHIYqaqq4vnnn+fBBx/ktddeY9y4cclOSVqJaZpcddVVzJw5k2g0SjQaJRwO43K5+O677ygoKEh2iq3mrrvu4tlnnyUSiXD11Vdzww037Jq2ceNGgsEgPXr0sNy+YRg5+5rWaDEqIiIiO23ZsoWcnH3+norIIWTHjh3ce++9vPLKK5x88sl89dVXDBgwINlpSSsyDIPnn39+t88mTZrEuHHjdl0dPNR88MEHbNy4kWeeeYZ58+Zht9vJyMjYbZ7i4uJWzUHFqIiISBNMnjyZUaNGJTsNEWllkyZN4qKLLuLcc89l2bJl5OfnJzslSYKFCxdy3nnn8fXXX9PQ0MD06dMZOXIkdrs92am1mHvvvZdVq1bx8MMPt3rRuS8awEhERKQRgUCAr7/+mscee4wLL7ww2emISCv6+OOPueCCC3jllVf4y1/+okL0MFZRUYHL5WLLli0MHjyYo48+mgcffDDZabWoP/3pTzidTqZNm8af/vQn5s6dSzweb9McVIyKiIg04sYbb2TcuHFs3bqV5cuXY5pmslMSkVbw7rvvcsUVV/Dhhx8yduzYZKcjSZaRkcG2bduIxWKMHDmSKVOmcNddd7F9+/Zkp9YiIpEI33//PVdeeSVr167lF7/4BcOGDWP06NFtmofR2I/qsGHDTA3UICIih7vq6mpmzJjBLbfcwh133MEll1yS7JREpIUEAgF++ctf8umnn/Lvf/+b4cOHJzslaWNr166lpKRkt0cxJk6cyJgxY/j222956623GDNmDKmpqbz33nsH9ei6a9as4c4772TWrFls2LCBa665hnXr1jFkyBC6dOnCiBEjGDRoUIv2aRjGXNM0h+11mopRERGRppk0aRLXX3897733Hvn5+XsM9CAiB5dVq1Zx1llnMXDgQJ555hnS09OTnZK0sVgsRrt27TAMg0ceeYTLLruM0tJSunfvzrp16/joo4+YO3cuNTU1FBcXYxgGLpeL7Oxs4vE4VVVVVFVVEQgE6NOnDxMmTKBdu3bJXqy92rp1KwUFBdx5550cccQRBAIBzj///FbvV8WoiIhICzBNk5tvvpkPP/yQyspKrrvuOu6///5DakALkcNFPB5n0KBBXH311fzkJz85qK92SfMEg0HWrFnDjBkzeOGFF0hJSeHhhx9m3Lhx3HLLLTz77LOMGzeO9u3b89xzz+HxeDjiiCMoKirC5XIRCoUoLy/HbreTmZlJRkYGbrebuXPn8tFHH3HmmWdyzz330LFjx2Qv6i5vvfUWH3zwAS+//DKwswi32drmiU0VoyIiIi2srKyM8847D7/fz9///vfdBjpZunQpX3/9NTU1NdTV1VFXV0coFCInJ4f8/Hzy8/Np37496enp2O121q1bR0pKCscccwxOpzOJSyVy+Jg2bRrXXnstixYtUiF6GOnRowerVq0C4Nxzz+XCCy/ktNNOw+Vy8e677/LEE09QUlJCaWkp5513HjfffDN9+/ZtcvuVlZU89thjPP3007z22muccMIJrbUoe4hGo7zyyis8/PDDbN++nZNOOon7778fl8tFQUEBf/7zn+nQoQO9e/emT58+bZZXY8WoXu0iIiJiQU5ODp999hm33HILvXv3JjMzkzfeeIOVK1fy85//nLPPPpucnBzS0tIoKCjA5XJRVlbGqlWrmDJlClu3bqWmpoZIJEKnTp0oLy9n06ZNTJ06le7duyd78UQOebNnz2bMmDEqRA8zN9xwA5MmTWLFihVMnTqVzMxMSkpKKC8v5/PPP2f16tVcd9113HjjjZZut83MzOSee+7h2GOP5fLLL2f9+vVtcgWyrq6OE088EafTyVNPPUW3bt144YUXGDZsGC+99BLHHHMMwWCQiRMntnouzaEroyIiIgmKx+Ncc801ALz//vt888039O/fv9nt3HrrrXi9Xu65556WTlFE/j8PPvggixYt4pVXXlFBephatWoVH374IWvWrMHn83HSSSdxzDHH4PF4WqT9IUOG8PDDD7fJ6MzXXHMNwWCQl156abftecaMGZx99tncddddPPjgg7zwwgtterUWdGVURESkVdlsNsrKypg1axY//elPLRWiAMcccwxPPvlkC2cnIntz3XXXceKJJ5Kbm8uRRx7JnXfeyZFHHpnstKQNde/enVtuuaXV2r/qqqu46aab+Otf/8qxxx7bav3MmDGDjz76iOXLl+/xh5UjjzySjz76iBNPPJH777+fJ598ss2L0cboPaMiIiItYNmyZWzbto2TTz7ZchujRo1i1qxZVFdXt2BmIrI3GRkZzJ49m0WLFjF+/HjOO+88zj77bJYtW5bs1OQQccMNN3Dvvfdy1llnEYvFWLduHZMmTSIQCCTUbjweZ8OGDXz++efccMMNnH766TzxxBOkpaXtdf5hw4ZRXFzMO++8Q/v27RPqu6XpNl0REZEEhUIhPB4PPp+PmpqahEbXveKKK8jIyODPf/5zC2YoIvvT0NDAk08+yUMPPcSZZ57J3XffTVFRUbLTkkNAamoqt956K48//jidO3cmFAoxc+ZMfD4f4XAYl8u13zaqq6t56aWX+PTTT5k2bRqpqan06tWLI488kp/+9Kfk5uY2Gj9s2DDmzp3Ltm3b2vzVM43dpqsroyIiIgn6v5EZx44dm/BrXh555BFef/11pk2b1hKpiUgTeb1efvWrX7Fy5Upyc3Pp378/5557Lh999BHBYDDZ6clBavv27dTV1fHkk08yd+5c5syZQ79+/fjVr37FlClTcLvdvPTSS3uNjcViTJkyhRtvvJHOnTszY8YMfvzjH7N27VpKSkr4+uuv+cMf/rDfQhTgvvvuY9q0aQfcO1B1ZVRERCRBb775Jueddx7Tpk3jqKOOSri9t99+mzvvvJP58+fj9XpbIEMRaa7Kykr+/e9/88orr7Bw4ULGjBnD+PHjOeecc/Z5O6TI/+/Xv/41999/P08//TTXX389AFVVVXTs2BG73c4pp5zC+vXrd/sD5Ny5c/nb3/7G+++/T0FBARMmTODKK6+ksLAwWYuREL1nVEREpBWVl5czc+ZMTjvttBZr87zzzqNTp0489NBDLdamiFhTXl7OZ599xttvv82kSZM499xzeeCBB8jOzk52anIAq6mpIT09HYBgMIjb7cY0TX7zm99w3333MWzYMCZPnkxxcTGLFy9m6dKlPPDAAyxfvpybbrqJ8847jy5duiR5KRKn23RFRERaUXZ2dosWogBPPvkkL7zwAsuXL2/RdkWk+bKzs/nRj37EO++8w/Lly/H5fPTr14+nn36acDic7PTkAGSa5q6Rev/617/idrsJhUJ0796d++67jzPPPJNp06aRkpJCx44deeKJJ7jiiiu45JJLWLt2LbfffvshUYjuj4pRERGRA1BeXh633XYbt956a7JTEZH/0a5dOx577DE+/vhjPvjgA3r37s1rr71GPB5PdmpygKioqGDChAk899xzdO/enSuvvBK
"text/plain": [
"<Figure size 1440x1008 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"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": [
"### 6.2 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 0x13ed521c0>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x1008 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 7 High Resolution ROI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 7.1 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": [
"### 7.2 Calculate Data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<awips.dataaccess.PyGridData.PyGridData object at 0x13ecb4eb0>]\n",
"0.0 22.5625 3.0\n",
"0.0 35.375 6.0\n",
"0.0 38.375 9.0\n",
"0.0 38.375 12.0\n",
"0.0 41.375 15.0\n",
"0.0 48.625 18.0\n",
"0.0 73.0625 30.0\n",
"0.0 94.9375 33.0\n",
"0.0 96.125 36.0\n",
"0.0 97.0 39.0\n",
"0.0 99.375 45.0\n",
"0.0 100.0625 48.0\n",
"0.0 100.25 51.0\n",
"0.0 100.4375 57.0\n",
"0.0 100.4375 63.0\n",
"0.0 118.25 66.0\n",
"0.0 127.625 69.0\n",
"0.0 131.125 75.0\n",
"0.0 131.375 78.0\n",
"0.0 131.5 81.0\n",
"0.0 131.875 84.0\n",
"0.0 132.875 90.0\n",
"0.0 133.375 96.0\n",
"0.0 139.1875 102.0\n",
"0.0 141.625 120.0\n",
"0.0 141.75 126.0\n",
"0.0 142.1875 132.0\n",
"0.0 143.375 138.0\n",
"0.0 148.6875 144.0\n",
"0.0 156.25 150.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": [
"### 7.3 Plot ROI"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/scarter/opt/miniconda3/envs/python3-awips/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py:1702: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n",
" X, Y, C, shading = self._pcolorargs('pcolormesh', *args,\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x13edc39a0>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x1008 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 8 See Also\n",
"\n",
"### 8.1 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",
"### 8.2 Additional Documentation\n",
"\n",
"**python-awips:**\n",
"\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",
"\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": [
"[Top](https://unidata.github.io/python-awips/examples/generated/Precip_Accumulation_Region_of_Interest.html)\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": false,
"sideBar": false,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": false,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}