Plotting the 2019 Tour de France

There is no bigger event in cycling than the Tour de France, a race which takes most of July as it crisscrosses France before bringing the riders to a fateful final sprint in Paris on the Champs-Élysées. I love both cycling and plots (as I mentioned last month), so once again I found a way to combine the two, by graphically exploring how the race unfolded.

The code that generated the plots can be found here (rendered on Github). The data is here.

The Race for Yellow

The yellow jersey is awarded to the rider with the lowest combined time across all 21 stages of the tour. Only a few riders are really in contention for yellow; the vast majority of the others are brought along to support their team leaders. Going into the 2019 Tour, defending champion Geraint Thomas was the favorite, but there were several strong challengers.

Below I show how the top riders did throughout the race by plotting how far behind the leader they were after each stage. Where a rider’s line is near the top they are close to taking the lead; when they drop down they are losing time.

A line plot showing how far behind the leader each top-finishing rider was after each stage.

Julian Alaphilippe held the jersey for the most days, even defending it on the individual time trial against expert time trialist Thomas. But Alaphilippe is not a climber, and after a brave defense of the jersey in the Pyrenees, he lost time in the Alps to Egan Bernal, Steven Kruijswijk, Emanuel Buchmann, and Thibaut Pinot. Pinot had looked out of contention earlier, but stormed back with a massive attack on stage 15. Unfortunately, he was forced to withdraw on stage 19 due to an injury.

Alaphilippe finally fell behind during that stage as well, losing the yellow jersey to Bernal. He lost his podium spot on stage 20 when he cracked during the final part of the climb. Alaphilippe finished 5th when they rolled through the Champs-Élysées.

The Rest of the Race

From the above plot you might think that all the riders in the Tour finish within a few minutes of each other. But they do not. The last place rider, the lanterne rouge, was four and a half hours behind Egan Bernal.

A line plot showing how far behind the leader every rider was for each stage.

Bernal and Alaphilippe, who looked so far apart in the first plot, are now seen to be neck-and-neck. Yoann Offredo looked like a lock to win the lanterne rogue when he fell ill on stage 8, but Sebastian Langeveld took it in the penultimate stage after suffering an injury in the second week of the race.

Peter Sagan, the green jersey winner, was only interested in sprints. He took it easy on the mountain stages to conserve energy, as you can see in the steep declines on stages 14 and 15 (in the Pyrenees) and Stages 18–20 (in the Alps). Most other riders performed similarly, although some recovered time on stage 17 when the favorites let a large breakaway group escape and gain a 20 minute advantage. Sagan did not make that group, which is clear from his lack of rise on the plot.

Romain Bardet, the polka dot jersey winner, was fighting for the yellow jersey until stage 14 where he cracked and lost 20 minutes. This forced him to pivot to trying to win the climbing jersey, which meant he needed to be one of the first riders to reach the top of the remaining climbs. For the last few climbing stages he stayed with the favorites or attacked early, keeping his time behind pretty consistent.