← Back to Blog
klimaspiraleklimadatendatenvisualisierungthreejsclaude-codeJuly 26, 2026 · 11 min read

Klimaspirale Part 2: The Baseline Trap

BASELINE 1951–1980 · PARIS 1850–1900 · +0.19 °CAI-generated image
Editorial illustration: two steel measuring rules hang vertically side by side on a dark stone wall, their zero marks visibly offset against each other. A caliper spans the gap between the two scales and puts the offset at '+0.19 °C' in its display window. To the left and right, one brass plaque each: 'BASELINE 1951–1980' and 'PARIS 1850–1900'.Editorial illustration: two steel measuring rules hang vertically side by side on a dark stone wall, their zero marks visibly offset against each other. A caliper spans the gap between the two scales and puts the offset at '+0.19 °C' in its display window. To the left and right, one brass plaque each: 'BASELINE 1951–1980' and 'PARIS 1850–1900'.

Part 1 had settled the second check: there is a maintained climate spiral, and the original premise was gone. The first check was the plausibility review of our own presentation. The numbers held. September 2023 at +1.48 °C really is the highest single month in the series, 2024 the warmest year, but not the warmest month.

What the research subagent found on the side wasn’t in the data. It was in the scale: the translucent cylinder I had had set at 1.5 °C on the build day didn’t stand where the climate target actually lies.

Two zero points for the same warming

Our axis shows GISTEMP anomalies against the baseline period 1951 to 1980. The Paris Agreement talks about warming relative to the pre-industrial era, usually calculated as 1850 to 1900. Both are statements about the same measured warming, and they arrive at different numbers.

There is an official number for the conversion. The GISTEMP FAQ states it as “adding ~0.19ºC”: to convert a GISTEMP value to pre-industrial, you add 0.19 °C. The FAQ expressly dates the offset to January 2025 and notes that it may still change slightly in the future. It’s a measured value with a version date, not a constant. Claude Code checked it against our own series and arrived at the same number.

The cross-check ran via the IPCC: the Sixth Assessment Report states a warming of 1.09 °C relative to 1850 to 1900 for the decade 2011 to 2020. GISTEMP delivers about 0.90 °C for the same period against 1951 to 1980. Plus 0.19 gives 1.09.

What that means for our own graphic is rather uncomfortable. The ring at 1.5 °C on our scale corresponds to roughly 1.69 °C pre-industrial and therefore lies beyond Paris, not on it. The Paris 1.5 degree target sits at just 1.31 °C on our scale, well inside the ring that had been called “climate target” the whole time.

That made it clear how someone can read this graphic wrong without making a mistake themselves. They see the most recent loops pressing against a ring that says 1.5 °C, remember the number from the agreement, and draw the obvious conclusion. On this scale the conclusion is wrong, because the Paris mark lies further in.

The rule I took away from it is narrow: never call the ring at 1.5 °C the “Paris target” without saying in the same picture which period it is calculated against.

This sort of conversion comes up constantly in the field, because practically every series brings its own zero point. GISTEMP calculates against 1951 to 1980, the NOAA series against the twentieth-century mean or against 1991 to 2020, Copernicus against 1850 to 1900. Four reference periods for the same atmosphere, and anyone laying numbers from them side by side produces contradictions that aren’t contradictions.

The Paris toggle

The proposal came from Claude Code. The existing rings stay where they are: six of them from −0.5 to +2 °C, with the white zero ring in the middle. A second pair joins them, dashed, at 1.31 and 1.81 °C. This pair is labelled 1.5 and 2 °C, because those are the Paris numbers. The distance to the identically named solid rings is the offset itself, visible as a gap instead of as a footnote.

“Yes, that would be a good option for our interactive page, a Paris toggle like that, one that visibly shows the shift.”

The construction introduces no second data source. It stays one axis with one series, only the labelling changes the reference. The whole series spans from −0.82 to +1.48 °C, and within that span 0.19 °C is a distance you could take for line width when you look at it. That is exactly why drawing it alone isn’t enough. It has to be named.

Then came an objection from me about the labelling:

“Should we even be showing Paris 2.0 degrees? That implies as if there had been a 2 degree agreement.”

There is no two degree agreement in the Paris Agreement. The text commits to holding warming well below 2 °C, and additionally to pursuing efforts to limit it to 1.5 °C. The 2.0 is the upper limit you want to stay under, the 1.5 the actual target. In a graphic where both lie on top of each other as marks of equal rank, that difference disappears.

Out of that came two different labels. The dashed ring at 1.5 is called “Paris target 1.5 °C” and is yellow, the one at 2.0 is called “Paris limit 2 °C” and is red. The difference is one word and one color, and it decides what somebody takes away from a screenshot. Two identically named rings would have turned an upper limit into a second target, one nobody agreed to in that form.

The top-down view

Looking straight down into the funnel is the most obvious move when you have a spiral in front of you. And that was exactly where the picture was useless.

“When the spiral is finished and I tip it so that I’m looking straight down on it, then the lines cover the rings completely”

The annual loops lie on top of each other and cover the scale rings. The topmost ones are closer to the camera and therefore drawn bigger than the lower ones. But the flat top-down view is really the form this presentation became known for. The clip that set the project off runs as a flat disc for most of its length and only tips into perspective at the end. Anyone looking down on it in the browser is after the view they already know, and up to then got an overgrown picture.

Claude Code turned that into a toggle that takes the perspective out of the view. After that a flat chart lies there when you look down, one in which no ring is closer to the viewer than another. In the top-down view the annual discs disappear as well, because they stand exactly on top of each other and show nothing anyway.

Event markers

Then came an idea from me that adds a layer to the spiral:

“How about we also add special events with floating labels, like e.g. the Paris decision, 1990 I think it was?”

The year is a guess, and it’s wrong. The agreement was adopted in 2015 and entered into force in 2016. I was a quarter of a century off, and the verification corrected it without comment. In this project the chain of evidence has corrected my memory more often than the other way round.

The same check delivered a year and a documented effect for each candidate. The eruption of Pinatubo in 1991 cooled the global mean by about 0.4 °C, with the low point in the year after. The 0.5 to 0.6 °C you more often read for it holds only for the northern hemisphere. Because our series is a global one, the smaller value belongs in the picture. Kyoto was 1997.

With the political events a problem came out that a marker can’t really solve: they have two points in time. The Paris Agreement was adopted in 2015 and entered into force in 2016. The first American withdrawal was announced in 2017 and took effect in 2020. A floating sign hangs at a single year. Which of the two points in time you pick is a decision, not a fact.

The trap in my own app

Two days later I stood in front of the running application and took one of these markers for a bug.

“I think there’s a bug here: at the event ‘2024 - first year above 1.5 °C (pre-ind.)’ the curve is very clearly below 1.5 degrees. Is that a different reference space or does the presentation not fit?”

The answer to the question in the last half-sentence is yes. The label makes a statement about pre-industrial warming, the axis is a 1951-to-1980 axis, and that’s why an event “above 1.5 °C” sits visibly below the 1.5 line in the picture. Both statements are correct, and together they look like an arithmetic error. That is exactly the trap the Paris toggle exists for. It caught me in my own application, with the conversion still fresh in my head.

I asked a second time right away, because I didn’t understand why 2024 of all years was singled out: “Um, but why 2024, the years before and after it are each warmer than their previous years too?!” The embarrassing part is in the quote itself. The label said “(pre-ind.)”, the abbreviation for pre-industrial, so the answer was already in the picture. I read straight past it. An abbreviated reference note in brackets explains nothing. You only read it once you already know what it points to.

The decision went against dropping the label and for the unspectacular fix: the label stays, and the value on our axis goes behind it, in this case +1.29 °C. That puts both references in the picture, and anyone who doesn’t connect them finds the answer right next to it.

Anyone doing the arithmetic here runs into another inconsistency though: 1.29 plus 0.19 is 1.48, just under 1.5. On our series, 2024 doesn’t actually reach the mark. So the statement in the label can’t come from this series but from a different one. Different temperature series arrive at different values for the same year, because they measure differently and combine differently. That’s the same effect as the baseline period, one level up: it isn’t the zero point that differs, it’s the whole series.

The clean fix would be to name the source in the label. In the end the label took a different route: it now says “warmest year on record” — a claim the app’s own series covers, which no longer needs an outside source at all. The 1.5-degree framing, source included, lives in the explainer overlay instead.

The first viewer to trip over this label was me.

The explainer overlay

That same evening I wrote the brief that turned the whole baseline issue into a page inside the application:

“We still need good, easy to understand explanations on the page, why the Paris targets deviate and by how much and the thing with the different measurement periods”

Out of that came an overlay behind an ⓘ, bilingual, four sections long. What an anomaly is and what a baseline period is. Why the series calculates against 1951 to 1980 and the agreement against 1850 to 1900. The offset with the conversions. And the section I actually consider the most important.

This fourth section says that a record month on this scale does not mean a climate target has been broken. There are two reasons for that, and the offset is only the first. The second: the agreement talks about long-term warming, not about a single month.

Human-caused warming sits at 1.24 °C in the decadal mean for 2016 to 2025, according to the annual assessment of global climate indicators. The observed global temperature did rise above 1.5 °C in the running mean for the first time, but according to Copernicus currently sits below it again at 1.43 °C. The exceedance was an event, not yet a state.

The way in is the line that stands in the footer in Paris mode: reference period, offset in brackets, “what does that mean? ⓘ”. The pointer is there exactly when four rings are in the picture and the question comes up why two of them lie somewhere else.

The overlay sits in the application, one click away from the spiral. It isn’t in the videos. Anyone who sees the climate spiral only as an animation sees the cylinder at 1.5 °C and reads the label. There is no place where the thing about the baseline period is written down.

Everything to do with pub and scrub, we’ll do later. Build first, clean up after.


Part 2 of 4 in the Klimaspirale series.

← Klimaspirale Part 1: From a Video to My Own Data | Klimaspirale Part 3: The Objection I Missed →

The spiral from this series is a project: Climate Spiral.

Comments

Commenting takes an email confirmation or a GitHub login. Comments run on my own server, not on an ad provider's — details in the privacy policy.