Skip to content

Specialty plots

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.

Schematic Hovmöller diagram: time versus longitude A panel with longitude on the horizontal axis and time increasing downward. A diagonal streak running from upper-left to lower-right indicates a feature propagating eastward over time; the slope of the streak encodes its speed. slope = speed Longitude → (west to east) 90°W 90°E Time ↓ (days) eastward-propagating feature near-stationary feature
Figure 1. In a Hovmöller, a feature that moves east traces a streak that leans to the right as you read downward in time. A more vertical streak means slower motion (little longitude change over time); a more horizontal, tilted streak means faster propagation, and a near-vertical band means the feature barely moves. This is exactly how propagating tropical convection is diagnosed.
  1. Pick a latitude band. Set lat_min / lat_max to the belt you care about (the example uses 5 S–5 N). The field is averaged across it.
  2. Pick a time window. date_start and date_end bound the vertical axis.
  3. Set the contour scale. contour_min/contour_max/contour_del define the bands, colorscale the palette.
  4. Read the slope. Diagonal streaks reveal propagating systems; their tilt gives direction and speed.

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.

Schematic Skew-T Log-P diagram A thermodynamic diagram with pressure decreasing upward on the vertical axis and skewed temperature isotherms. A red temperature curve and a green dewpoint curve rise through the column; the horizontal gap between them indicates moisture. Wind barbs are shown along the right edge. T − Td gap = moisture 1000 700 500 300 Pressure (hPa, log) ↑ Temperature → (skewed) wind Temperature Dewpoint
Figure 2. A Skew-T plots two curves against pressure: temperature (red) and dewpoint (green). Where the curves hug each other the air is moist and near-saturated; where they splay apart it is dry. Wind barbs along the side give the vertical wind structure. Skewed isotherms and a log-pressure axis are conventions that make atmospheric layers easier to compare. Schematic; line colors are the documented defaults.

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'].

Schematic wind rose A polar plot centered on a compass. Petals point toward N, E, S and W and the intercardinal directions. Longer petals mean wind blows from that direction more often; concentric color bands within each petal represent wind-speed bins. N S E W Speed bins (m/s): 0–2 2–4 4–6 petal length = frequency
Figure 3. Each petal points toward the direction the wind blows from; the longest petal is the prevailing wind (here, from the west). Color bands stack low-to-high wind speed outward, so a petal with a thick outer band is contributing many strong-wind cases. Bins, sector width and colors are set by 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:

FieldRoleExample value
fcst_var_val_1Forecast variable(s) to plotTMP
series_val_1Series variable that defines the bandsfcst_lev = P250, P500, P700, P850, P925
indy_varIndependent (x) variablefcst_init_beg
list_stat_1Statistic to contourME (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.

PlotInputKey config fieldsOutput
HovmöllerNetCDF (e.g. precip, mm/day)input_data_file, lat_min/lat_max, date_start/date_end, contour_min/contour_max/contour_del, colorscale, unit_conversionPNG (plot_filename)
Skew-TColumnar 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_colorPNG per sounding
Wind roseMET MPR text (point_stat_mpr.txt)stat_input, wind_rose_breaks, wind_rose_angle, wind_rose_marker_colors, angularaxis_tickvals/angularaxis_ticktext, dump_pointsPNG (+ optional .points1)
ContourMET text (contour.data)stat_input, fcst_var_val_1, series_val_1, indy_var, list_stat_1, contour_intervals, color_palette, plot_statPNG (+ 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