A station-board comparison of 20 national and metropolitan passenger rail systems — network length, electrification, high-speed coverage, punctuality (with its weasel-words attached), ridership, and what a 100 km intercity walk-up actually costs in euros.
| Service | Time | Platform | Status |
|---|
Vanilla SVG, no D3, no canvas — pure markup you can right-click View Source on. Hover any point or bar for the underlying numbers. Two charts use log scales because the data span 3+ orders of magnitude; we'd rather show small countries than crush them at the origin.
Caveat: y now prefers the journey-weighted national figure (computed per country in the “How we computed X's punctuality” panel) and falls back to the harmonized 5-min estimate when no weighted figure exists. Hover any dot to see which one is shown and the underlying threshold mix. Dots in lighter colour are extrapolated rather than directly published — mostly the harmonized fallbacks.
expanded_stats.passengers_per_capita_per_yearLong-distance trains almost always have a looser on-time threshold than commuter rail — India quotes Mail/Express within 15 min, Australia's V/Line long-haul within 11 min, while Mumbai Suburban and Sydney Trains use 5 min. So a small headline gap between the two bars below may reflect very different yardsticks. Hover each bar for the country's threshold, period and source link.
How to read it. The y-axis is log(100−%) — the "delay rate". That stretches the top of the chart so 95 % to 99 % gets more vertical room than 80 % to 84 %, because at the high end every percentage point matters more (going from 99 to 99.5 is twice as good, not 0.5 % better). Shapes encode source: ● operator-published, ☐ regulator-published, × rider survey, △ press / journalism, ◇ harmonized 5-min estimate (lighter). Hover any country dot or curve and the others fade to 15 % opacity so you can read one at a time. Click a legend chip on the right to pin a country until you click again. Single-threshold countries (CN, SG, JP…) appear as a labelled dot — the curve cannot be drawn from one point. The harmonized 5-min estimate is build.py's best guess of each country at a common 5-min threshold, computed by log-linear extrapolation in the (100−%) space; the badge in the tooltip shows the method and confidence. Newer and usually more rigorous: the weighted on-time column in the comparison table below uses the per-country journey-weighted national figure (each operator at its own published threshold, weighted by ridership) — trust that as the single best number for a country, and use the harmonized 5-min estimate when you specifically need cross-country apples-to-apples at a common threshold.
One personalised profile per system, styled with that operator's brand cues. Each ticket is a real link — punch the stub to board.
One big sortable table — click any column header to sort. Hover a punctuality cell to see the on-time threshold (e.g. within 5 min vs within 15 min — they are not apples to apples). The weighted on-time column is the per-country journey-weighted national figure (the same number computed in each country's “How we computed X's punctuality” panel) — usually the most rigorous single number for that country. The harm. 5 min column is build.py's earlier harmonized estimate at a common 5-min threshold; keep it for cross-country comparison but trust weighted as the country's own honest read.
| Country | Network km | Electrified % | HSR km | Punctuality % | Weighted on-time | Harm. 5 min % | Annual journeys | €/100 km walk-up | Page |
|---|