forked from 3rdparty/wrf-python
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
from netCDF4 import Dataset |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
from matplotlib.cm import get_cmap |
|
import cartopy.crs as crs |
|
from cartopy.feature import NaturalEarthFeature |
|
|
|
from wrf import (getvar, interplevel, to_np, latlon_coords, get_cartopy, |
|
cartopy_xlim, cartopy_ylim) |
|
|
|
# Open the NetCDF file |
|
ncfile = Dataset("wrfout_d01_2016-10-07_00_00_00") |
|
|
|
# Extract the pressure and wind variables |
|
|
|
p = getvar(ncfile, "pressure") |
|
# Note: This is m/s. |
|
ua = getvar(ncfile, "ua") |
|
va = getvar(ncfile, "va") |
|
|
|
# Interpolate u, and v winds to 950 hPa |
|
u_950 = interplevel(ua, p, 950) |
|
v_950 = interplevel(va, p, 950) |
|
|
|
# Get the lat/lon coordinates |
|
lats, lons = latlon_coords(u_950) |
|
|
|
# Get the map projection information |
|
cart_proj = get_cartopy(u_950) |
|
|
|
# Create the figure |
|
fig = plt.figure(figsize=(12, 9)) |
|
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=0.5) |
|
ax.coastlines('50m', linewidth=0.8) |
|
|
|
# Add the 950 hPa wind barbs, only plotting every 'thin'ed barb. Adjust thin |
|
# as needed. Also, no scaling is done for the arrows, so you might need to |
|
# mess with the scale argument. |
|
thin = 50 |
|
plt.quiver(to_np(lons[::thin, ::thin]), to_np(lats[::thin, ::thin]), |
|
to_np(u_950[::thin, ::thin]), to_np(v_950[::thin, ::thin]), |
|
transform=crs.PlateCarree()) |
|
|
|
# Set the map bounds |
|
ax.set_xlim(cartopy_xlim(u_950)) |
|
ax.set_ylim(cartopy_ylim(v_950)) |
|
|
|
ax.gridlines() |
|
|
|
plt.title("Arrows") |
|
|
|
plt.show()
|
|
|