TransitRadar

The three different things “cancelled” means

A cancelled train is not one thing. It might never have left, it might have been abandoned half way, or it might still be running and simply not stopping where you are standing — and the data records those very differently.

“Cancelled” is the bluntest word on a departure board, and underneath it the railway is making a much more specific statement. Some of those statements are considerably worse for the person reading them than others.

The train that is cancelled only where you are

The most important distinction is one boards rarely make. A cancellation can apply to a whole run or to individual stops along it.

When a train is running late enough to be causing trouble further along, a common response is to cancel some of its calls — it runs, but it misses out the intermediate stations to get back on time. In the data, that arrives as a flag on those particular calling points rather than on the service. The train is not cancelled. Your station is.

From your platform the two look identical, and this is why we draw cancellation markers from the per-stop flag rather than the service-level one. A train cancelled from part-way along is a real journey for the people already aboard.

There is a trap in doing that. Passing points — the junctions and loops a train runs through without stopping — inherit the flag too. Rendering those the same way would have the board solemnly announcing that a signal box had been cancelled, so they are excluded from the markers and from the live time rows.

The reason that does not exist

Here is the consequence that catches people out. A run cancelled from part-way along often carries no reason at all.

The feed publishes one reason per service, and a partial cancellation is not a service-level event — so there is nothing for the reason to attach to. The stops are flagged, the train continues, and the “why” is simply absent.

This is why our daily archive pages state how many cancellations carry a reason rather than assuming they all do, and why the gap is reported as a fact about the day rather than quietly rounded away. On the days we have measured, reason coverage runs between 78% and 100% — good, but never guaranteed.

Whole sentences, reproduced exactly

When a reason does exist, it arrives as a complete sentence written by the industry:

This service has been cancelled because of a safety inspection of the track.

This service has been delayed by a speed restriction over defective track.

This service has been delayed by a late running train being in front of this one.

We print these verbatim and never prefix or reword them. It is tempting to write “Reason:” in front, and doing so produces “Reason: This service has been cancelled because…”, which reads as though a machine assembled it. More importantly, rewording risks changing what was said — these sentences are carefully phrased, and “a late running train being in front of this one” is a precise claim about reactionary delay rather than a vague apology.

One busy day in our archive recorded 1,050 cancellations, of which 448 shared a single reason: forecasted severe weather. That is the kind of thing the daily pages exist to make visible.

Never left, or abandoned en route

A second feed — the one carrying train movements rather than forecasts — classifies its own cancellations, and the distinction is the one a passenger most wants:

  • At origin. The train never started. Nobody is stranded; everybody is inconvenienced at a station with, in principle, alternatives.
  • En route. The train set out and was terminated somewhere along the way. There are people on it, at a station they did not choose, and they need onward transport.

Those are very different events and “Cancelled” covers both. We show the distinction on a service page when the feed gives it, in the feed's own terms. The same source also has a raw reason code, but there is no open reference to decode it against, so it is shown as published rather than turned into a guess — and only when no proper sentence is available to show instead.

How rare is it, really?

Cancellation flags are much rarer in the raw data than a bad commute suggests. Measured across a full national snapshot of about 850,000 calling points, roughly 5,076 carried a cancellation flag. Actual arrival times, by contrast, were present on over 509,000 of them.

A useful way to hold that: cancellation is an exceptional event that the feed marks explicitly, whereas lateness is the ordinary condition of a railway and has to be worked out by comparing times. Which is why cancellations are the most trustworthy figure on our archive pages even on the dates where punctuality data is thin — the methodology explains why those two things vary independently.

Reinstatement, and why a page can contradict itself

Cancellations are not final. A service can be cancelled and then reinstated, and the feed expresses this by re-sending the train's status — each update replacing its predecessor rather than amending it, and carrying only the points it has something new to say about.

The practical effect is that a page loaded a minute apart can legitimately show a different answer, and neither is stale in the usual sense. If you are watching a train through disruption, the most recent statement is the only one that counts, which is why live pages carry the time they were last updated rather than presenting themselves as timeless.

If you want to see what happened rather than what is happening, the daily archive records each day's cancellations and their reasons once the day is complete and can no longer change.