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