Free WRF-Python Scripts to make meteorological charts, for the global community

William.Hatheway

Well-known member
Hello meteorologists and atmospheric scientists,


Over the years, I have developed a large collection of Python tools designed to highlight WRF’s capabilities for operational forecasting and real-world analysis. These scripts are intended to be freely shared with the community, especially for users with limited Python experience who still want access to high-resolution graphics, automation, batch processing, and a wide range of meteorological diagnostics.


All scripts are standardized across the collection, with consistent workflow, structure, and commenting style, making them easier to understand, adapt to new regions, and modify for custom use.


On my GitHub page, you will find a folder titled “Python Charts that work World.” It contains 93 Python scripts and 5 Bash shell scripts that generate a full suite of WRF-based graphics, including multicore execution options. The products span synoptic and mesoscale diagnostics, severe weather parameters, and simulated remote sensing. The goal is to provide a complete, automated, operational-ready post-processing package that converts raw WRF output into briefing-quality graphics with minimal user intervention.


GitHub profile:
GitHub - HathewayWill/WRF_Python_Scripts: synoptic/mesoscale, severe, clouds/moisture, precip/snow, fire weather, tropical, and point profiles. Supports Polar/Lat-Lon/Mercator/Lambert, multi-file outputs, and metric/imperial units. Open-source, free.!


Compatibility and installation​


The scripts are designed for the WRF-MOSIT Conda environment using wrf-python, but they can also run outside Conda if the following modules are installed:


numpy, matplotlib, metpy, wrf-python, netCDF4, pillow, scipy, cartopy, geopandas


Map projections and WRF output handling​


All scripts support WRF’s native map projections, including Polar, Lat-Lon, Mercator, and Lambert. They are designed to work with common WRF output formats, including single files, multi-time files, or multiple wrfout files, without requiring users to reorganize output directories.


Geographic context and operational styling​


A major focus of this project is producing maps that are operationally useful immediately. The scripts include consistent Cartopy-based geographic features such as coastlines, borders, water bodies, land–ocean contrast, gridlines, and optional terrain context. Styling is standardized so line weights, labels, and backgrounds remain consistent across products.


Many scripts include automated city and location labeling to improve situational awareness for forecasting and briefing use. Placement is optimized to minimize overlap with meteorological fields.


Global design and unit support​


The plotting logic is designed to work anywhere in the world, allowing the same workflow to be used for domains over any region. Metric and Imperial versions of many diagnostics are included, so users can run identical products without modifying unit conversions.


Script categories​


The collection includes products in the following areas:


• Upper-air and synoptic diagnostics
• Moisture, cloud, and column fields
• Convective and severe weather parameters
• Surface analysis and human-impact indices
• Precipitation, snowfall, and SWE accumulations
• Simulated radar-style products
• Fire weather indices
• Point-based forecasts, vertical profiles, and cross sections
• Tropical surface diagnostics

1767924192047.png

1767924222750.png

1767924233498.png

Automation​


Five Bash shell scripts automate execution by activating environments, locating WRF output, creating date-stamped directories, and running full chart suites across domains, including optional parallel processing. A complete forecast graphics package can be generated in a single run.


Purpose​


The goal of this project is to lower the barrier to producing high-quality WRF post-processing graphics. Users new to Python can run a full operational suite with minimal setup, while experienced users can treat the scripts as a standardized framework for adding additional diagnostics.


I hope this resource is useful to the community.

More information available here: WRF-Python Codes for the Weather Research and Forecasting Model
 
Can you clarify major differences between your codes and wrf-python? Thanks.
It should be pretty clear I thought in the description but I can clarify.

These are python codes that utilizes wrf python and other python modules to make several different charts that are frequently used in meteorology. These charts usually are not shown/made in wrf python or unidata examples.

In addition the python codes are set up so that any user can use and modify them as they wish for free.

The reason I put it in user contributed tools is because this is something not related to wrf python installation or help with a problem. It is just something that I made to help the atmospheric community and wrf users.

If you want me to remove the post please let me know.
 
Good afternoon meteorologists and atmospheric scientists around the globe,

I wanted to post an update to this project and clarify the current direction of the repository.

The WRF Python Scripts collection has now been expanded to 96 Python scripts and 5 Bash shell scripts. The goal remains the same: to provide free, community-focused Python tools that help turn WRF output into useful meteorological charts, diagnostics, and analysis products.

These scripts are not intended to replace or compete with wrf-python. Instead, they are practical post-processing scripts that use wrf-python, along with other Python libraries such as NumPy, Matplotlib, MetPy, netCDF4, Cartopy, GeoPandas, and pandas, to generate meteorological products directly from WRF output.

The repository includes scripts for:

  • Upper-air and synoptic diagnostics
  • Moisture, clouds, and column diagnostics
  • Convective and severe weather diagnostics
  • Surface analysis and human-impact indices
  • Precipitation, snowfall, and snow water equivalent
  • Simulated radar-style products
  • Fire weather diagnostics
  • Point-based graphics, Skew-T plots, meteograms, vertical profiles, and cross sections
  • Tropical surface diagnostics
I have also added a new set of WRF-native trajectory tools:

  • WRF_Back_Trajectory.py
  • WRF_Forward_Trajectory.py
  • WRF_Back_Forward_Trajectory.py
These calculate air parcel pathways directly from WRF output. They read raw WRF U, V, and W fields, destagger and rotate U/V winds to earth-relative flow, use WRF W for passive 3D parcel motion, and support nested-domain fallback. For example, a trajectory can begin on d03, then continue on d02 and d01 if the parcel exits the inner nest.

The default trajectory timestep is now 60 minutes, which works well for common hourly WRF output. Users can still override that with --dt-min if they have higher-frequency output or want to run a sensitivity test.

The trajectory scripts can produce:

  • Back trajectories for source-region analysis
  • Forward trajectories for downstream parcel-path analysis
  • Paired back/forward trajectories around a launch time
  • CSV output for each trajectory
  • Combined CSV output for multiple heights or locations
  • Cartopy maps with a vertical parcel-path panel
The repository is available here:

GitHub - HathewayWill/WRF_Python_Scripts: synoptic/mesoscale, severe, clouds/moisture, precip/snow, fire weather, tropical, and point profiles. Supports Polar/Lat-Lon/Mercator/Lambert, multi-file outputs, and metric/imperial units. Open-source, free.!

I hope this continues to be useful to the WRF, meteorology, and atmospheric science community. Feedback, testing, and suggestions are welcome.
 

Attachments

  • wrf_backforwardtraj_d03_MULTI_20260625_120000Z_levels_100-500-1000mAGL_passive_w_modelclip_raw.png
    wrf_backforwardtraj_d03_MULTI_20260625_120000Z_levels_100-500-1000mAGL_passive_w_modelclip_raw.png
    776.8 KB · Views: 4
  • wrf_backtraj_d03_MULTI_20260626_000000Z_levels_50-100-250-500-750-1000-1500-2000-2500-3000-400...png
    wrf_backtraj_d03_MULTI_20260626_000000Z_levels_50-100-250-500-750-1000-1500-2000-2500-3000-400...png
    1.4 MB · Views: 4
  • wrf_fwdtraj_d03_MULTI_20260625_000000Z_levels_100-500-1000mAGL_passive_w_modelclip_raw.png
    wrf_fwdtraj_d03_MULTI_20260625_000000Z_levels_100-500-1000mAGL_passive_w_modelclip_raw.png
    721.3 KB · Views: 5
Hi Hatheway,
Although there are different ways to define precipitation efficiency, the method proposed by Sui (Sui et al., 2007) is widely used. Please refer to the attached document.
 

Attachments

Hi Hatheway,
Although there are different ways to define precipitation efficiency, the method proposed by Sui (Sui et al., 2007) is widely used. Please refer to the attached document.

Hi Hatheway,
Although there are different ways to define precipitation efficiency, the method proposed by Sui (Sui et al., 2007) is widely used. Please refer to the attached document.
give this a shot
 

Attachments

The new hurricane and tropical vortex tracking script is:
WRF_Hurricane_Track.py

The goal is to provide a WRF-native hurricane and vortex tracking workflow that can diagnose both track and intensity directly from model output.
The script currently calculates:
Surface pressure center
850 hPa vorticity center
700 hPa vorticity center
10 m wind center
Intensity time series
Generic ATCF-style track output

For moving nests, the tracker can follow the storm as it transitions through nested domains. For example, a track can begin in d03, continue in d02, and fall back to d01 if the vortex exits the inner nest.

wrf_hurricane_track_d02_2026070500_to_2026070700_intensity.pngwrf_hurricane_track_d02_2026070500_to_2026070700_map.png
 
Back
Top