Hovmöller diagram
A time-versus-space panel. Track features that propagate — for example precipitation marching eastward across the tropics over days.
time vs longitude · propagation
Hovmöller · Skew-T Log-P · Wind rose · Contour — diagnosing structure, not just scoring it.
Most METplotpy plots draw scores — a line of bias over lead time, a box of error spread. The four plots on this page are different: they draw fields and structure. They help you see where something is in space, when it happens, how it is stacked in the vertical, or which way it blows. They are diagnostic pictures of the atmosphere or of a statistic spread over two dimensions, and they are read like a meteorologist reads a chart, not like a scorecard.
METplotpy is the plotting library of the METplus ecosystem. Many of its plots — line plots, box plots, performance diagrams — take statistics that MET has already computed and lay them out for comparison. The four plots covered here lean the other way: they are primarily diagnostic visualizations of fields and distributions. You reach for them when you want to understand the structure of what the model or the observations are doing, rather than to assign it a single number.
Hovmöller diagram
A time-versus-space panel. Track features that propagate — for example precipitation marching eastward across the tropics over days.
time vs longitude · propagation
Skew-T Log-P
A vertical thermodynamic profile — temperature and dewpoint plotted against pressure, with wind barbs. Reads atmospheric stability at a single point.
vertical profile · stability
Wind rose
A polar distribution of wind by direction and speed — which way the wind blows from, how often, and how hard.
polar · wind distribution
Contour plot
A statistic drawn as filled or line contours over two axes — often a statistic across time and height.
2-D field · contours
A Hovmöller diagram is a 2-D contour plot with time along one axis and a spatial dimension along the other. In METplotpy’s implementation, time runs down the vertical axis and longitude runs along the horizontal axis. The field being contoured is typically a meridional average — an average across a band of latitudes — so that a whole latitude band collapses to a single line that you can stack over time.
The documented example averages precipitation from 5 S to 5 N (the deep tropics) and contours it as it evolves. Because each horizontal slice is one moment in time, a feature that drifts east or west shows up as a tilted streak running diagonally down the panel. The slope of that streak is the propagation speed — that is the whole point of the diagram.
The input is a NetCDF file (the documented sample is precip.erai.sfc.1p0.2x.2014-2016.nc) holding a gridded variable over latitude, longitude, and time. The example variable is precip in mm/day. You point the plot at a latitude band with lat_min and lat_max (e.g. -5 to 5) and a time window with date_start and date_end.
A PNG image of the contoured time-longitude field. Contour banding is controlled by contour_min, contour_max, and contour_del (the example uses 0.2, 1.6, 0.2), and the color scheme by colorscale (the example uses BuPu). A unit_conversion factor (example 250) rescales the raw values before plotting.
lat_min / lat_max to the belt you care about (the example uses 5 S–5 N). The field is averaged across it.date_start and date_end bound the vertical axis.contour_min/contour_max/contour_del define the bands, colorscale the palette.The Skew-T Log-P diagram is the classic thermodynamic chart for upper-air soundings. The name describes the axes: temperature lines are skewed (drawn at an angle rather than vertical), and pressure runs up the vertical axis on a logarithmic scale (so the spacing matches real atmospheric layering). It plots a single vertical column of the atmosphere — a sounding — at one place and time.
On a Skew-T you read two curves and the gap between them:
Temperature (red by default) — How warm the air is at each pressure level, from the surface up.
Dewpoint (green by default) — The temperature at which the air would saturate. The distance between the temperature and dewpoint curves is a direct read on moisture: curves close together mean nearly-saturated, moist air; a wide gap means dry air.
Wind barbs — Plotted alongside the profile to show wind speed and direction at each level.
Optional reference lines can be overlaid to gauge stability: dry adiabats, moist adiabats, and mixing lines. Together they let a forecaster judge how a parcel of air would rise and whether the column favors convection.
METplotpy’s Skew-T is built to plot TC-Diag sounding data — output from a tropical-cyclone diagnostics code set developed at CIRA (the Cooperative Institute for Research in the Atmosphere). These soundings represent the thermodynamic environment the storm will be in if it follows a given track, so the chart is a way to inspect the atmosphere a forecast cyclone is steering into.
Input is a columnar ASCII text file with a .dat extension (sample data lives under $METPLOTPY_BASE/metplotpy/test/skew_t/data). Output is a PNG per sounding, named after the input file with the extension swapped to .png; the plot title is built from the input filename and the sounding hour.
A wind rose graphically displays the wind speed and wind direction at a particular location over a period of time. It is drawn in polar coordinates: spokes radiate outward toward the compass directions, the length of a petal shows how often the wind blows from that direction, and color bands within the petal break that frequency down by wind-speed range.
It answers questions a time series cannot: What is the prevailing wind here? How often is it strong? Does the strong wind come from one sector or many? One glance gives the whole directional distribution.
The wind rose reads columnar text output from MET’s MPR (matched pair) line type — the row-per-pair output that pairs each observation with its matching forecast. The documented sample is point_stat_mpr.txt under $METPLOTPY_BASE/test/wind_rose. The input path is given by stat_input.
A PNG image (default wind_rose_default.png; the docs also show a styled wind_rose_custom.png). Optionally, setting dump_points: True writes a .points1 intermediate file for use with METviewer, plus log output.
wind_rose_breaks — The wind-speed bins that color each petal (the example runs 0.0–6.0 m/s in 1.0 m/s steps).
wind_rose_angle — The angular width of each direction sector (typically 30°).
wind_rose_marker_colors — The color palette mapped onto the speed bins.
angularaxis_tickvals / angularaxis_ticktext — The direction tick positions [0, 90, 180, 270] and their labels ['N', 'E', 'S', 'W'].
wind_rose_breaks, wind_rose_angle and wind_rose_marker_colors.
Schematic petals with three illustrative 2 m/s bands; a real run often uses finer bins (the example
config steps 0–6 m/s by 1 m/s). Not real data.A contour plot in METplotpy displays statistical values across a two-dimensional space by drawing them as contours. It is conceptually like a scatter plot — values placed on two axes — but the output is contoured (filled and/or line bands) rather than dotted. The documentation notes contour plots are often used to examine a statistic over a series of times or heights.
The input is columnar text output from MET (sample: $METPLOTPY_BASE/test/contour/contour.data), pointed to by stat_input. The plot is told how to slice that table with a small set of fields:
| Field | Role | Example value |
|---|---|---|
fcst_var_val_1 | Forecast variable(s) to plot | TMP |
series_val_1 | Series variable that defines the bands | fcst_lev = P250, P500, P700, P850, P925 |
indy_var | Independent (x) variable | fcst_init_beg |
list_stat_1 | Statistic to contour | ME (mean error / bias) |
In the documented example this produces a picture of mean error (ME) for temperature (TMP) as a function of initialization time (fcst_init_beg) across a stack of pressure levels (P250 through P925) — i.e. error versus time and height in one panel.
A PNG image (default raster format png16m), with an optional .points1 intermediate file for METviewer. Banding is controlled by contour_intervals (number of levels, example 10) and color_palette (example green_red); plot_stat (example median) sets the aggregation used when collapsing values. Toggles such as add_color_bar and add_contour_overlay, plus axis labels (xaxis, yaxis_1), title, caption and legend placement (legend_box, legend_inset) round out the styling.
All four plots are driven by YAML configuration files and emit PNGs. The table collects the headline knobs documented for each. Field names are copied verbatim from the source guides; example values are the ones the docs show.
| Plot | Input | Key config fields | Output |
|---|---|---|---|
| Hovmöller | NetCDF (e.g. precip, mm/day) | input_data_file, lat_min/lat_max, date_start/date_end, contour_min/contour_max/contour_del, colorscale, unit_conversion | PNG (plot_filename) |
| Skew-T | Columnar ASCII .dat (TC-Diag) | input_directory, input_file_extension, all_sounding_hours, sounding_hours_of_interest, display_dry_adiabats, display_windbarbs, temp_line_color, dewpt_line_color | PNG per sounding |
| Wind rose | MET MPR text (point_stat_mpr.txt) | stat_input, wind_rose_breaks, wind_rose_angle, wind_rose_marker_colors, angularaxis_tickvals/angularaxis_ticktext, dump_points | PNG (+ optional .points1) |
| Contour | MET text (contour.data) | stat_input, fcst_var_val_1, series_val_1, indy_var, list_stat_1, contour_intervals, color_palette, plot_stat | PNG (+ optional .points1) |
These plots sit at the diagnostic end of the verification pipeline. The wind rose and contour plot consume MET output (MPR matched pairs and other line-type tables); the Hovmöller and Skew-T consume gridded NetCDF and TC-Diag soundings respectively. Their outputs are static images for reports, plus optional .points1 files that feed METviewer.
A derived, human-readable re-presentation — not official documentation. Sources: Hovmoeller · Skew-T · Wind Rose · Contour