forked from 3rdparty/wrf-python
				
			
				 22 changed files with 2083 additions and 93 deletions
			
			
		| After Width: | Height: | Size: 128 KiB | 
| After Width: | Height: | Size: 56 KiB | 
| @ -0,0 +1,7 @@@@ -0,0 +1,7 @@ | ||||
| .. _diagnostic-table: | ||||
| 
 | ||||
| Table of Available Diagnostics | ||||
| ================================= | ||||
| 
 | ||||
| .. include:: _templates/product_table.txt | ||||
| 
 | ||||
| @ -0,0 +1,54 @@@@ -0,0 +1,54 @@ | ||||
| Installation | ||||
| ============ | ||||
| 
 | ||||
| Required Dependencies | ||||
| ---------------------- | ||||
| 
 | ||||
|     - Python 2.7, 3.4, or 3.5 | ||||
|     - numpy (1.9 or later) | ||||
|     - wrapt (1.10 or later) | ||||
| 
 | ||||
| 
 | ||||
| Highly Recommended Packages | ||||
| ---------------------------- | ||||
| 
 | ||||
|     - xarray (0.7.0 or later) | ||||
|     - PyNIO (1.4.3 or later) | ||||
|     - netCDF4-python (1.2.0 or later) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Plotting Packages | ||||
| ------------------------- | ||||
| 
 | ||||
|     - PyNGL (1.4.3 or later) | ||||
|     - matplotlib (1.4.3 or later) | ||||
|         - cartopy (0.13 or later) | ||||
|         - basemap (1.0.8 or later) | ||||
| 
 | ||||
| 
 | ||||
| Installing via Conda | ||||
| --------------------- | ||||
| 
 | ||||
| The easiest way to install wrf-python is using  | ||||
| `Conda <http://conda.pydata.org/docs/>`_:: | ||||
| 
 | ||||
|     $ conda install -c bladwig wrf-python | ||||
|      | ||||
|      | ||||
| Installing via Source Code | ||||
| -------------------------- | ||||
| 
 | ||||
| Installation via source code will require a Fortran and C compiler in order  | ||||
| to run f2py.  You can get them | ||||
| `here <https://gcc.gnu.org/wiki/GFortranBinaries>`_. | ||||
| 
 | ||||
| The source code is available via github: | ||||
| 
 | ||||
| https://github.com/NCAR/wrf-python | ||||
| 
 | ||||
| To install, change to the wrf-python directory and run:: | ||||
| 
 | ||||
|     $ pip install . | ||||
| 
 | ||||
| 
 | ||||
| @ -0,0 +1,10 @@@@ -0,0 +1,10 @@ | ||||
| What's New | ||||
| =========== | ||||
| 
 | ||||
| v1.0a3 | ||||
| ----------- | ||||
| 
 | ||||
| - Alpha release 3 | ||||
| - Added docstrings | ||||
| - Now uses CoordPair for cross sections so that lat/lon can be used | ||||
| - Renamed some functions and or arguments | ||||
| @ -0,0 +1,91 @@@@ -0,0 +1,91 @@ | ||||
| Plotting Examples | ||||
| ================= | ||||
| 
 | ||||
| The examples below show how wrf-python can be used to make plots with  | ||||
| matplotlib (with basemap and cartopy) and PyNGL.  None of these examples  | ||||
| make use of xarray's builtin plotting functions, since additional work is most | ||||
| likely needed to extend xarray in order to work correctly.  This is planned  | ||||
| for a future release. | ||||
| 
 | ||||
| Matplotlib With Cartopy | ||||
| ------------------------- | ||||
| 
 | ||||
| Cartopy is becoming the main tool for base mapping with matplotlib, but you should  | ||||
| be aware of a few shortcomings when working with WRF data. | ||||
| 
 | ||||
| - The builtin tranformations of coordinates when calling the contouring functions | ||||
|   do not work correctly with the rotated pole projection.  The  | ||||
|   transform_points method needs to be called manually on the latitude and  | ||||
|   longitude arrays. | ||||
|    | ||||
| - The rotated pole projection requires the x and y limits to be set manually | ||||
|   using set_xlim and set_ylim. | ||||
| 
 | ||||
| - You can't place latitude and longitude labels on the axes when using  | ||||
|   any projection other than Mercator or LatLon. | ||||
| 
 | ||||
| 
 | ||||
| Plotting a Two-dimensional Field | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| 
 | ||||
| .. image:: _static/images/cartopy_slp.png     | ||||
|    :scale: 100% | ||||
|    :align: center | ||||
|     | ||||
| .. code-block:: python | ||||
| 
 | ||||
|     from __future__ import (absolute_import, division, print_function, unicode_literals) | ||||
|      | ||||
|     from netCDF4 import Dataset    | ||||
|     import matplotlib.pyplot as plt | ||||
|     from matplotlib.cm import get_cmap | ||||
|     import cartopy.crs as crs | ||||
|     from cartopy.feature import NaturalEarthFeature | ||||
|      | ||||
|     from wrf import npvalues, getvar, smooth2d | ||||
|      | ||||
|     ncfile = Dataset("wrfout_d01_2016-10-07_00_00_00") | ||||
|      | ||||
|     # Get the sea level pressure | ||||
|     slp = getvar(ncfile, "slp") | ||||
|      | ||||
|     # Smooth the sea level pressure since it tends to be noisy near the mountains | ||||
|     smooth_slp = smooth2d(slp, 3) | ||||
|      | ||||
|     # Get the numpy array from the XLAT and XLONG coordinates | ||||
|     lats = npvalues(slp.coords["XLAT"]) | ||||
|     lons = npvalues(slp.coords["XLONG"]) | ||||
|      | ||||
|     # Get the wrf.WrfProj object | ||||
|     wrf_proj = slp.attrs["projection"] | ||||
|      | ||||
|     # The WrfProj.cartopy() method returns a cartopy.crs projection object | ||||
|     cart_proj = wrf_proj.cartopy() | ||||
|      | ||||
|     # Create a figure that's 10x10 | ||||
|     fig = plt.figure(figsize=(10,10)) | ||||
|      | ||||
|     # Get the GeoAxes set to the projection used by WRF | ||||
|     ax = plt.axes(projection=cart_proj) | ||||
|      | ||||
|     # Download and add the states and coastlines | ||||
|     states = NaturalEarthFeature(category='cultural', scale='50m', facecolor='none', | ||||
|                                  name='admin_1_states_provinces_shp') | ||||
|     ax.add_feature(states, linewidth=.5) | ||||
|     ax.coastlines('50m', linewidth=0.8) | ||||
|      | ||||
|     # Make the contour outlines and filled contours for the smoothed sea level pressure. | ||||
|     # The transform keyword indicates that the lats and lons arrays are lat/lon coordinates and tells  | ||||
|     # cartopy to transform the points in to the WRF projection set for the GeoAxes. | ||||
|     plt.contour(lons, lats, npvalues(smooth_slp), 10, colors="black", transform=crs.PlateCarree()) | ||||
|     plt.contourf(lons, lats, npvalues(smooth_slp), 10, transform=crs.PlateCarree()) | ||||
|      | ||||
|     # Add a color bar | ||||
|     plt.colorbar(ax=ax, shrink=.47) | ||||
|      | ||||
|     # Set the map limits | ||||
|     ax.set_xlim(wrf_proj.cartopy_xlim()) | ||||
|     ax.set_ylim(wrf_proj.cartopy_ylim()) | ||||
|      | ||||
|     # Add the gridlines | ||||
|     ax.gridlines() | ||||
| @ -0,0 +1,415 @@@@ -0,0 +1,415 @@ | ||||
| { | ||||
|  "cells": [ | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "metadata": { | ||||
|     "collapsed": true | ||||
|    }, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "%matplotlib inline" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "metadata": { | ||||
|     "collapsed": false | ||||
|    }, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "from __future__ import (absolute_import, division, print_function, unicode_literals)\n", | ||||
|     "\n", | ||||
|     "import numpy as np\n", | ||||
|     "import matplotlib.pyplot as plt\n", | ||||
|     "from matplotlib.cm import get_cmap\n", | ||||
|     "import cartopy.crs as crs\n", | ||||
|     "import cartopy.feature as cfeature\n", | ||||
|     "from netCDF4 import Dataset as nc\n", | ||||
|     "\n", | ||||
|     "from wrf import npvalues, getvar, smooth2d\n", | ||||
|     "\n", | ||||
|     "# Open the output NetCDF with netcdf-python\n", | ||||
|     "filename = \"/Users/ladwig/Documents/wrf_files/wrfout_d01_2016-10-07_00_00_00\"\n", | ||||
|     "ncfile = nc(filename)\n", | ||||
|     "\n", | ||||
|     "# Get sea level pressure and cloud top temperature\n", | ||||
|     "slp = getvar(ncfile, \"slp\")\n", | ||||
|     "ctt = getvar(ncfile, \"ctt\")\n", | ||||
|     "\n", | ||||
|     "# Smooth the SLP\n", | ||||
|     "smooth_slp = smooth2d(slp, 3)\n", | ||||
|     "\n", | ||||
|     "# Extract the latitude and longitude coordinate arrays as regular numpy array instead of xarray.DataArray\n", | ||||
|     "lons = npvalues(slp.coords[\"XLONG\"])\n", | ||||
|     "lats = npvalues(slp.coords[\"XLAT\"])\n", | ||||
|     "\n", | ||||
|     "# Get the cartopy projection class\n", | ||||
|     "wrf_proj = slp.attrs[\"projection\"]\n", | ||||
|     "cart_proj = wrf_proj.cartopy()\n", | ||||
|     "\n", | ||||
|     "# Create the figure\n", | ||||
|     "fig = plt.figure(figsize=(4,4))\n", | ||||
|     "ax = plt.axes([0.1,0.1,0.8,0.8], projection=cart_proj)\n", | ||||
|     "\n", | ||||
|     "# Download and create the states, land, and oceans using cartopy features\n", | ||||
|     "states = cfeature.NaturalEarthFeature(category='cultural', scale='50m', facecolor='none',\n", | ||||
|     "                             name='admin_1_states_provinces_shp')\n", | ||||
|     "land = cfeature.NaturalEarthFeature(category='physical', name='land', scale='50m', \n", | ||||
|     "                                    facecolor=cfeature.COLORS['land'])\n", | ||||
|     "ocean = cfeature.NaturalEarthFeature(category='physical', name='ocean', scale='50m', \n", | ||||
|     "                                     facecolor=cfeature.COLORS['water'])\n", | ||||
|     "\n", | ||||
|     "# Make the pressure contours.\n", | ||||
|     "contour_levels = [960, 965, 970, 975, 980, 990]\n", | ||||
|     "c1 = plt.contour(lons, lats, npvalues(smooth_slp), levels=contour_levels, colors=\"white\", \n", | ||||
|     "            transform=crs.PlateCarree(), zorder=3, linewidths=1.0)\n", | ||||
|     "\n", | ||||
|     "# Add pressure contour labels\n", | ||||
|     "#plt.clabel(c1, contour_levels, inline=True, fmt='%.0f', fontsize=7)\n", | ||||
|     "\n", | ||||
|     "# Create the filled cloud top temperature contours\n", | ||||
|     "contour_levels = [-80, -70, -60, -50, -40, -30, -20, -10, 0, 10]\n", | ||||
|     "plt.contourf(lons, lats, npvalues(ctt), contour_levels, cmap=get_cmap(\"Greys\"),\n", | ||||
|     "             transform=crs.PlateCarree(), zorder=2)\n", | ||||
|     "\n", | ||||
|     "plt.plot([-80,-77.8], [26.75,26.75], color=\"yellow\", marker=\"o\", transform=crs.PlateCarree(), zorder=3)\n", | ||||
|     "\n", | ||||
|     "# Create the label bar for cloud top temperature\n", | ||||
|     "#cb2 = plt.colorbar(ax=ax, fraction=0.046, pad=0.04)\n", | ||||
|     "cb2 = plt.colorbar(ax=ax)\n", | ||||
|     "\n", | ||||
|     "# Draw the oceans, land, and states\n", | ||||
|     "ax.add_feature(ocean)\n", | ||||
|     "ax.add_feature(land)\n", | ||||
|     "ax.add_feature(states, linewidth=.5, edgecolor=\"black\")\n", | ||||
|     "\n", | ||||
|     "# Crop the domain to the region around the hurricane\n", | ||||
|     "ax.set_extent([-85., -75.0, np.amin(lats), 30.0], crs=crs.PlateCarree())\n", | ||||
|     "ax.gridlines(crs=crs.PlateCarree(), draw_labels=False)\n", | ||||
|     "\n", | ||||
|     "# Add the title and show the image\n", | ||||
|     "#plt.title(\"Hurricane Matthew Cloud Top Temperature (degC) \")\n", | ||||
|     "plt.savefig(\"/Users/ladwig/Documents/workspace/wrf_python/doc/source/_static/images/matthew.png\",\n", | ||||
|     "           transparent=True, bbox_inches=\"tight\")\n", | ||||
|     "plt.show()\n" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "metadata": { | ||||
|     "collapsed": false | ||||
|    }, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "%matplotlib inline\n", | ||||
|     "\n", | ||||
|     "from __future__ import (absolute_import, division, print_function, unicode_literals)\n", | ||||
|     "\n", | ||||
|     "import numpy as np\n", | ||||
|     "import matplotlib.pyplot as plt\n", | ||||
|     "from matplotlib.cm import get_cmap\n", | ||||
|     "import cartopy.crs as crs\n", | ||||
|     "from cartopy.feature import NaturalEarthFeature\n", | ||||
|     "from Nio import open_file\n", | ||||
|     "\n", | ||||
|     "from wrf import npvalues, getvar, smooth2d, ll_to_xy, CoordPair, vertcross, getproj, get_proj_params, to_xy_coords\n", | ||||
|     "\n", | ||||
|     "# Open the output NetCDF file with PyNIO\n", | ||||
|     "filename = \"/Users/ladwig/Documents/wrf_files/wrfout_d01_2016-10-07_00_00_00\"\n", | ||||
|     "pynio_filename = filename + \".nc\"\n", | ||||
|     "ncfile = open_file(pynio_filename)\n", | ||||
|     "\n", | ||||
|     "# Extract pressure and model height\n", | ||||
|     "z = getvar(ncfile, \"z\", timeidx=0)\n", | ||||
|     "dbz = getvar(ncfile, \"dbz\", timeidx=0)\n", | ||||
|     "\n", | ||||
|     "wspd =  getvar(ncfile, \"uvmet_wspd_wdir\", units=\"kt\")[0,:]\n", | ||||
|     "Z = 10**(dbz/10.)\n", | ||||
|     "\n", | ||||
|     "start_point = CoordPair(lat=26.75, lon=-80.0)\n", | ||||
|     "end_point = CoordPair(lat=26.75, lon=-77.8)\n", | ||||
|     "\n", | ||||
|     "# Compute the vertical cross-section interpolation.  Also, include the lat/lon points along the cross-section.\n", | ||||
|     "z_cross = vertcross(Z, z, wrfin=ncfile, start_point=start_point, end_point=end_point, latlon=True, meta=True)\n", | ||||
|     "wspd_cross = vertcross(wspd, z, wrfin=ncfile, start_point=start_point, end_point=end_point, latlon=True, meta=True)\n", | ||||
|     "dbz_cross = 10.0 * np.log10(z_cross)\n", | ||||
|     "\n", | ||||
|     "# Create the figure\n", | ||||
|     "fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(4,4))\n", | ||||
|     "#ax = plt.axes([0.1,0.1,0.8,0.8])\n", | ||||
|     "\n", | ||||
|     "# Define the contour levels [0, 50, 100, 150, ....]\n", | ||||
|     "levels = [5 + 5*n for n in range(15)]\n", | ||||
|     "\n", | ||||
|     "# Make the contour plot\n", | ||||
|     "a = axes[0].contourf(npvalues(wspd_cross))\n", | ||||
|     "# Add the color bar\n", | ||||
|     "fig.colorbar(a, ax=axes[0])\n", | ||||
|     "\n", | ||||
|     "b = axes[1].contourf(npvalues(dbz_cross), levels=levels)\n", | ||||
|     "fig.colorbar(b, ax=axes[1])\n", | ||||
|     "\n", | ||||
|     "# Set the x-ticks to use latitude and longitude labels.\n", | ||||
|     "coord_pairs = npvalues(dbz_cross.coords[\"xy_loc\"])\n", | ||||
|     "x_ticks = np.arange(coord_pairs.shape[0])\n", | ||||
|     "x_labels = [pair.latlon_str() for pair in npvalues(coord_pairs)]\n", | ||||
|     "axes[0].set_xticks(x_ticks[::20])\n", | ||||
|     "axes[0].set_xticklabels([], rotation=45)\n", | ||||
|     "axes[1].set_xticks(x_ticks[::20])\n", | ||||
|     "axes[1].set_xticklabels(x_labels[::20], rotation=45, fontsize=6) \n", | ||||
|     "\n", | ||||
|     "\n", | ||||
|     "# Set the y-ticks to be height.\n", | ||||
|     "vert_vals = npvalues(dbz_cross.coords[\"vertical\"])\n", | ||||
|     "v_ticks = np.arange(vert_vals.shape[0])\n", | ||||
|     "axes[0].set_yticks(v_ticks[::20])\n", | ||||
|     "axes[0].set_yticklabels(vert_vals[::20], fontsize=6) \n", | ||||
|     "axes[1].set_yticks(v_ticks[::20])\n", | ||||
|     "axes[1].set_yticklabels(vert_vals[::20], fontsize=6) \n", | ||||
|     "\n", | ||||
|     "# Set the x-axis and  y-axis labels\n", | ||||
|     "axes[1].set_xlabel(\"Latitude, Longitude\", fontsize=7)\n", | ||||
|     "axes[0].set_ylabel(\"Height (m)\", fontsize=7)\n", | ||||
|     "axes[1].set_ylabel(\"Height (m)\", fontsize=7)\n", | ||||
|     "\n", | ||||
|     "# Add a title\n", | ||||
|     "axes[0].set_title(\"Cross-Section of Wind Speed (kt)\", {\"fontsize\" : 10})\n", | ||||
|     "axes[1].set_title(\"Cross-Section of Reflectivity (dBZ)\", {\"fontsize\" : 10})\n", | ||||
|     "\n", | ||||
|     "plt.savefig(\"/Users/ladwig/Documents/workspace/wrf_python/doc/source/_static/images/matthew_cross.png\",\n", | ||||
|     "           transparent=True, bbox_inches=\"tight\")\n", | ||||
|     "plt.show()" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "metadata": { | ||||
|     "collapsed": false | ||||
|    }, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "%matplotlib inline\n", | ||||
|     "\n", | ||||
|     "from __future__ import (absolute_import, division, print_function, unicode_literals)\n", | ||||
|     "\n", | ||||
|     "import numpy as np\n", | ||||
|     "import matplotlib.pyplot as plt\n", | ||||
|     "from matplotlib.cm import get_cmap\n", | ||||
|     "import cartopy.crs as crs\n", | ||||
|     "import cartopy.feature as cfeature\n", | ||||
|     "from Nio import open_file\n", | ||||
|     "\n", | ||||
|     "from wrf import getvar, npvalues, vertcross, smooth2d, CoordPair\n", | ||||
|     "\n", | ||||
|     "# Open the output NetCDF file with PyNIO\n", | ||||
|     "filename = \"/Users/ladwig/Documents/wrf_files/wrfout_d01_2016-10-07_00_00_00\"\n", | ||||
|     "pynio_filename = filename + \".nc\"\n", | ||||
|     "ncfile = open_file(pynio_filename)\n", | ||||
|     "\n", | ||||
|     "# Get the WRF variables\n", | ||||
|     "slp = getvar(ncfile, \"slp\")\n", | ||||
|     "smooth_slp = smooth2d(slp, 3)\n", | ||||
|     "ctt = getvar(ncfile, \"ctt\")\n", | ||||
|     "z = getvar(ncfile, \"z\", timeidx=0)\n", | ||||
|     "dbz = getvar(ncfile, \"dbz\", timeidx=0)\n", | ||||
|     "Z = 10**(dbz/10.)\n", | ||||
|     "wspd =  getvar(ncfile, \"uvmet_wspd_wdir\", units=\"kt\")[0,:]\n", | ||||
|     "\n", | ||||
|     "# Set the start point and end point for the cross section\n", | ||||
|     "start_point = CoordPair(lat=26.75, lon=-80.0)\n", | ||||
|     "end_point = CoordPair(lat=26.75, lon=-77.8)\n", | ||||
|     "\n", | ||||
|     "# Compute the vertical cross-section interpolation.  Also, include the lat/lon points along the cross-section.\n", | ||||
|     "z_cross = vertcross(Z, z, wrfin=ncfile, start_point=start_point, end_point=end_point, latlon=True, meta=True)\n", | ||||
|     "wspd_cross = vertcross(wspd, z, wrfin=ncfile, start_point=start_point, end_point=end_point, latlon=True, meta=True)\n", | ||||
|     "dbz_cross = 10.0 * np.log10(z_cross)\n", | ||||
|     "\n", | ||||
|     "# Extract the latitude and longitude coordinate arrays as regular numpy array instead of xarray.DataArray\n", | ||||
|     "lons = npvalues(slp.coords[\"XLONG\"])\n", | ||||
|     "lats = npvalues(slp.coords[\"XLAT\"])\n", | ||||
|     "\n", | ||||
|     "# Get the cartopy projection class\n", | ||||
|     "wrf_proj = slp.attrs[\"projection\"]\n", | ||||
|     "cart_proj = wrf_proj.cartopy()\n", | ||||
|     "\n", | ||||
|     "# Create the figure which will have 3 subplots\n", | ||||
|     "fig = plt.figure(figsize=(7,5))\n", | ||||
|     "ax_ctt = fig.add_subplot(1,2,1,projection=cart_proj)\n", | ||||
|     "ax_wspd = fig.add_subplot(2,2,2)\n", | ||||
|     "ax_dbz = fig.add_subplot(2,2,4)\n", | ||||
|     "\n", | ||||
|     "## Plot the cloud top temperature\n", | ||||
|     "\n", | ||||
|     "# Download and create the states, land, and oceans using cartopy features\n", | ||||
|     "states = cfeature.NaturalEarthFeature(category='cultural', scale='50m', facecolor='none',\n", | ||||
|     "                             name='admin_1_states_provinces_shp')\n", | ||||
|     "land = cfeature.NaturalEarthFeature(category='physical', name='land', scale='50m', \n", | ||||
|     "                                    facecolor=cfeature.COLORS['land'])\n", | ||||
|     "ocean = cfeature.NaturalEarthFeature(category='physical', name='ocean', scale='50m', \n", | ||||
|     "                                     facecolor=cfeature.COLORS['water'])\n", | ||||
|     "\n", | ||||
|     "# Make the pressure contours.\n", | ||||
|     "contour_levels = [960, 965, 970, 975, 980, 990]\n", | ||||
|     "c1 = ax_ctt.contour(lons, lats, npvalues(smooth_slp), levels=contour_levels, colors=\"white\", \n", | ||||
|     "            transform=crs.PlateCarree(), zorder=3, linewidths=1.0)\n", | ||||
|     "\n", | ||||
|     "# Create the filled cloud top temperature contours\n", | ||||
|     "contour_levels = [-80.0, -70.0, -60, -50, -40, -30, -20, -10, 0, 10]\n", | ||||
|     "ctt_contours = ax_ctt.contourf(lons, lats, npvalues(ctt), contour_levels, cmap=get_cmap(\"Greys\"),\n", | ||||
|     "             transform=crs.PlateCarree(), zorder=2)\n", | ||||
|     "\n", | ||||
|     "ax_ctt.plot([start_point.lon, end_point.lon], [start_point.lat, end_point.lat], color=\"yellow\", \n", | ||||
|     "            marker=\"o\", transform=crs.PlateCarree(), zorder=3)\n", | ||||
|     "\n", | ||||
|     "# Create the label bar for cloud top temperature\n", | ||||
|     "cb_ctt = fig.colorbar(ctt_contours, ax=ax_ctt, shrink=.5)\n", | ||||
|     "cb_ctt.ax.tick_params(labelsize=5)\n", | ||||
|     "\n", | ||||
|     "# Draw the oceans, land, and states\n", | ||||
|     "ax_ctt.add_feature(ocean)\n", | ||||
|     "ax_ctt.add_feature(land)\n", | ||||
|     "ax_ctt.add_feature(states, linewidth=.5, edgecolor=\"black\")\n", | ||||
|     "\n", | ||||
|     "# Crop the domain to the region around the hurricane\n", | ||||
|     "ax_ctt.set_extent([-85., -75.0, np.amin(lats), 30.0], crs=crs.PlateCarree())\n", | ||||
|     "ax_ctt.gridlines(crs=crs.PlateCarree(), draw_labels=False)\n", | ||||
|     "\n", | ||||
|     "## Plot the cross sections\n", | ||||
|     "\n", | ||||
|     "# Make the contour plot for wspd\n", | ||||
|     "wspd_contours = ax_wspd.contourf(npvalues(wspd_cross))\n", | ||||
|     "# Add the color bar\n", | ||||
|     "cb_wspd = fig.colorbar(wspd_contours, ax=ax_wspd)\n", | ||||
|     "cb_wspd.ax.tick_params(labelsize=5)\n", | ||||
|     "\n", | ||||
|     "# Make the contour plot for dbz\n", | ||||
|     "levels = [5 + 5*n for n in range(15)]\n", | ||||
|     "dbz_contours = ax_dbz.contourf(npvalues(dbz_cross), levels=levels)\n", | ||||
|     "cb_dbz = fig.colorbar(dbz_contours, ax=ax_dbz)\n", | ||||
|     "cb_dbz.ax.tick_params(labelsize=5)\n", | ||||
|     "\n", | ||||
|     "# Set the x-ticks to use latitude and longitude labels.\n", | ||||
|     "coord_pairs = npvalues(dbz_cross.coords[\"xy_loc\"])\n", | ||||
|     "x_ticks = np.arange(coord_pairs.shape[0])\n", | ||||
|     "x_labels = [pair.latlon_str() for pair in npvalues(coord_pairs)]\n", | ||||
|     "ax_wspd.set_xticks(x_ticks[::20])\n", | ||||
|     "ax_wspd.set_xticklabels([], rotation=45)\n", | ||||
|     "ax_dbz.set_xticks(x_ticks[::20])\n", | ||||
|     "ax_dbz.set_xticklabels(x_labels[::20], rotation=45, fontsize=4) \n", | ||||
|     "\n", | ||||
|     "\n", | ||||
|     "# Set the y-ticks to be height.\n", | ||||
|     "vert_vals = npvalues(dbz_cross.coords[\"vertical\"])\n", | ||||
|     "v_ticks = np.arange(vert_vals.shape[0])\n", | ||||
|     "ax_wspd.set_yticks(v_ticks[::20])\n", | ||||
|     "ax_wspd.set_yticklabels(vert_vals[::20], fontsize=4) \n", | ||||
|     "ax_dbz.set_yticks(v_ticks[::20])\n", | ||||
|     "ax_dbz.set_yticklabels(vert_vals[::20], fontsize=4) \n", | ||||
|     "\n", | ||||
|     "# Set the x-axis and  y-axis labels\n", | ||||
|     "ax_dbz.set_xlabel(\"Latitude, Longitude\", fontsize=5)\n", | ||||
|     "ax_wspd.set_ylabel(\"Height (m)\", fontsize=5)\n", | ||||
|     "ax_dbz.set_ylabel(\"Height (m)\", fontsize=5)\n", | ||||
|     "\n", | ||||
|     "# Add a title\n", | ||||
|     "ax_ctt.set_title(\"Cloud Top Temperature (degC)\", {\"fontsize\" : 7})\n", | ||||
|     "ax_wspd.set_title(\"Cross-Section of Wind Speed (kt)\", {\"fontsize\" : 7})\n", | ||||
|     "ax_dbz.set_title(\"Cross-Section of Reflectivity (dBZ)\", {\"fontsize\" : 7})\n", | ||||
|     "\n", | ||||
|     "plt.savefig(\"/Users/ladwig/Documents/workspace/wrf_python/doc/source/_static/images/matthew.png\",\n", | ||||
|     "           transparent=True, bbox_inches=\"tight\")\n", | ||||
|     "plt.show()" | ||||
|    ] | ||||
|   }, | ||||
|   { | ||||
|    "cell_type": "code", | ||||
|    "execution_count": null, | ||||
|    "metadata": { | ||||
|     "collapsed": true | ||||
|    }, | ||||
|    "outputs": [], | ||||
|    "source": [ | ||||
|     "# SLP\n", | ||||
|     "from __future__ import (absolute_import, division, print_function, unicode_literals)\n", | ||||
|     "    \n", | ||||
|     "from netCDF4 import Dataset   \n", | ||||
|     "import matplotlib.pyplot as plt\n", | ||||
|     "from matplotlib.cm import get_cmap\n", | ||||
|     "import cartopy.crs as crs\n", | ||||
|     "from cartopy.feature import NaturalEarthFeature\n", | ||||
|     "\n", | ||||
|     "from wrf import npvalues, getvar, smooth2d\n", | ||||
|     "\n", | ||||
|     "ncfile = Dataset(\"/Users/ladwig/Documents/wrf_files/wrfout_d01_2016-10-07_00_00_00\")\n", | ||||
|     "\n", | ||||
|     "# Get the sea level pressure\n", | ||||
|     "slp = getvar(ncfile, \"slp\")\n", | ||||
|     "\n", | ||||
|     "# Smooth the sea level pressure since it tends to be noisey near the mountains\n", | ||||
|     "smooth_slp = smooth2d(slp, 3)\n", | ||||
|     "\n", | ||||
|     "# Get the numpy array from the XLAT and XLONG coordinates\n", | ||||
|     "lats = npvalues(slp.coords[\"XLAT\"])\n", | ||||
|     "lons = npvalues(slp.coords[\"XLONG\"])\n", | ||||
|     "\n", | ||||
|     "# Get the wrf.WrfProj object\n", | ||||
|     "wrf_proj = slp.attrs[\"projection\"]\n", | ||||
|     "\n", | ||||
|     "# The cartopy() method returns a cartopy.crs projection object\n", | ||||
|     "cart_proj = wrf_proj.cartopy()\n", | ||||
|     "\n", | ||||
|     "# Create a figure that's 10x10\n", | ||||
|     "fig = plt.figure(figsize=(10,10))\n", | ||||
|     "# Get the GeoAxes set to the projection used by WRF\n", | ||||
|     "ax = plt.axes(projection=cart_proj)\n", | ||||
|     "\n", | ||||
|     "# Download and add the states and coastlines\n", | ||||
|     "states = NaturalEarthFeature(category='cultural', scale='50m', facecolor='none',\n", | ||||
|     "                             name='admin_1_states_provinces_shp')\n", | ||||
|     "ax.add_feature(states, linewidth=.5)\n", | ||||
|     "ax.coastlines('50m', linewidth=0.8)\n", | ||||
|     "\n", | ||||
|     "# Make the contour outlines and filled contours for the smoothed sea level pressure.\n", | ||||
|     "# The transform keyword indicates that the lats and lons arrays are lat/lon coordinates and tells \n", | ||||
|     "# cartopy to transform the points in to grid space.\n", | ||||
|     "plt.contour(lons, lats, npvalues(smooth_slp), 10, colors=\"black\", transform=crs.PlateCarree())\n", | ||||
|     "plt.contourf(lons, lats, npvalues(smooth_slp), 10, transform=crs.PlateCarree())\n", | ||||
|     "\n", | ||||
|     "# Add a color bar\n", | ||||
|     "plt.colorbar(ax=ax, shrink=.47)\n", | ||||
|     "\n", | ||||
|     "# Set the map limits\n", | ||||
|     "ax.set_xlim(wrf_proj.cartopy_xlim())\n", | ||||
|     "ax.set_ylim(wrf_proj.cartopy_ylim())\n", | ||||
|     "\n", | ||||
|     "# Add the gridlines\n", | ||||
|     "ax.gridlines()" | ||||
|    ] | ||||
|   } | ||||
|  ], | ||||
|  "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.12" | ||||
|   } | ||||
|  }, | ||||
|  "nbformat": 4, | ||||
|  "nbformat_minor": 1 | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue