Case Study 2: Warming Stripes and the Power of a Single Bar Chart

In 2018, Ed Hawkins, a climate scientist at the University of Reading, released an image called "warming stripes." It was a horizontal bar chart. That is all — no axes, no labels, no title, no numbers, no legend. Each bar was a single year of temperature data, colored from blue (cold) to red (warm). The image became a viral climate communication phenomenon and has been reproduced on book covers, t-shirts, the cover of Greta Thunberg's book, and the roof of a car. This case study examines how a minimalist bar chart became one of the most effective pieces of climate visualization ever created.


The Situation

By 2018, climate scientists had been producing detailed temperature charts for decades. The standard climate visualization was a line chart of temperature anomalies over time — exactly the chart we have been building as our progressive project. The line chart is correct, it is informative, and it is boring. Climate scientists knew the message, but the public did not fully absorb it. The line chart's combination of technical precision and visual dryness failed to break through to audiences outside the climate science community.

Ed Hawkins had been thinking about this problem. He was a climate scientist at the University of Reading, specializing in climate variability and the use of historical temperature records. He had produced many of the standard climate charts himself. He knew they were not reaching non-specialists. The question was whether a different kind of chart could do what the line charts had failed to do: communicate the stark reality of warming to people who did not read scientific papers.

The constraint was real. Any chart that tried to compete with the standard line chart for scientific rigor would fail — the line chart is already the right chart for climate data from a technical perspective. The new chart had to do something the line chart did not. It had to be different in form, not just in decoration. It had to sacrifice some precision to gain some visceral impact. And it had to be so striking that a viewer would absorb the message in under a second without needing to read labels or interpret numbers.

In May 2018, Hawkins released the first version of what he called "warming stripes." It was a horizontal sequence of vertical colored bars, one bar per year, colored on a blue-to-red scale according to that year's temperature anomaly. The axes were removed. The title was minimal or absent. The numbers were invisible. A viewer looking at the chart saw only the pattern: blue bars on the left giving way to orange and red bars on the right, with the most intense red at the right edge. The chart was simultaneously empty and overwhelming — a pure visual statement that the world was warming.

The image spread quickly. Within weeks, climate scientists were sharing it on social media. Within months, it had appeared in newspapers, on TV, in educational materials, on clothing, and on posters. By 2019, it was appearing on the cover of Greta Thunberg's book No One Is Too Small to Make a Difference. By 2020, it was projected on buildings, printed on face masks, and used as the logo of climate advocacy groups. The warming stripes became, in a few short years, one of the most recognizable climate visualizations in the world.

This case study is worth including in Chapter 11 because the warming stripes are, technically, a bar chart. They are ax.bar() calls — or more precisely, a sequence of colored rectangles that could be produced with a few lines of matplotlib code. The chart is simple enough that you can reproduce it yourself by the end of this section. But the technical simplicity is the point: the chart's effectiveness does not come from elaborate styling or advanced chart types. It comes from disciplined design decisions applied to the most basic chart primitive.

The Data

The underlying data for the warming stripes is exactly what you would expect: annual global average temperature anomalies from 1850 (or whatever starting year the chart uses) to the present. This is the same kind of data you have been plotting in the climate progressive project. Hawkins used the HadCRUT dataset from the UK Met Office, but similar data is available from NASA GISS, NOAA, and Berkeley Earth. For each year, the dataset provides a single number: the global temperature anomaly (degrees Celsius) relative to some baseline period (often 1961-1990 or 1850-1900).

The data is small. From 1850 to 2024, that is 175 values. A CSV file with two columns: year and anomaly. The data volume is trivial. The visualization is also trivial in code terms. What is not trivial is the design decision to strip every standard chart element and let the color do all the work.

The Visualization

The warming stripes chart has a deceptively simple structure. Here is a matplotlib reproduction:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
import pandas as pd

# Load data: years and temperature anomalies
climate = pd.read_csv("climate_data.csv")  # columns: year, anomaly

# Set up the figure with no margins
fig, ax = plt.subplots(figsize=(12, 3))

# Normalize the anomalies to [0, 1] for the colormap
anomaly_min = climate["anomaly"].min()
anomaly_max = climate["anomaly"].max()
norm = mcolors.Normalize(vmin=anomaly_min, vmax=anomaly_max)

# Choose a diverging colormap: blue (cold) to red (warm)
cmap = plt.cm.RdBu_r  # reversed RdBu, so red is warm

# Draw one bar per year
for i, row in climate.iterrows():
    ax.bar(
        row["year"],
        1,                              # uniform bar height
        width=1,                        # no gaps between bars
        color=cmap(norm(row["anomaly"])),
        edgecolor="none",               # no outlines
    )

# Remove everything: axes, ticks, spines, labels
ax.set_xlim(climate["year"].min() - 0.5, climate["year"].max() + 0.5)
ax.set_ylim(0, 1)
ax.set_axis_off()  # hide all spines, ticks, and labels

fig.savefig("warming_stripes.png", dpi=300, bbox_inches="tight")

The entire reproduction is about 25 lines. Let us walk through the key decisions.

1. Uniform bar height. Every bar has height=1 — meaning the height does not encode anything. The height is just a constant to make the bars visible. Normally, bar height IS the encoding of a bar chart. Here, the encoding is the color. This is an unusual but deliberate choice: you are using a bar chart's shape (rectangular bars in sequence) but not its standard encoding (length proportional to value).

2. No gaps between bars. The width=1 parameter makes each bar exactly one year wide, so consecutive bars touch with no gap. This creates the continuous color sequence that looks like a gradient. With even a small gap, the stripes would look like a bar chart with colored bars; without gaps, they look like a solid color band that changes from blue to red over time.

3. Diverging colormap with a natural midpoint. The RdBu_r colormap runs from red (warm) through white (baseline) to blue (cold), reversed here so that warm is red. This is a diverging palette from Chapter 3, appropriate because the data is organized around a meaningful midpoint (the baseline temperature). The normalization maps the minimum anomaly to blue and the maximum to red, with the midpoint (zero) around white.

4. Remove every chart element except the bars. The ax.set_axis_off() call hides all spines, ticks, tick labels, axis labels, and grid lines. The figure has no title in the standard sense (though Hawkins sometimes added a small caption). What is left is just the colored stripes, a horizontal band of color that changes from blue to red as you scan from left to right.

The result is a chart that violates almost every principle from Chapters 6, 7, and 11. There are no axis labels. There are no tick marks. There is no title (or only a minimal caption). There is no legend. There is no source attribution on the chart itself (though Hawkins always credited the data source in accompanying text). In the context of a technical report or a scientific paper, this chart would be unacceptable — it violates the self-explanatory standard from Chapter 7 and leaves the viewer with no way to read specific values.

And yet, it works. It works because the chart is not trying to be a technical report. It is trying to be a visceral statement. The viewer does not need to know the exact value of the 2024 anomaly; they need to feel that something has changed, and the red bars on the right communicate that feeling more powerfully than a number could.

The Design Trade-offs

The warming stripes make several deliberate trade-offs:

1. Precision vs. impact. The chart sacrifices precision (you cannot read specific values) to gain impact (the color shift is undeniable). For a scientific audience, precision matters more; for a general public audience, impact matters more. Hawkins chose impact because his target audience was the public, not scientists.

2. Context vs. minimalism. The chart sacrifices context (no baseline reference, no time labels) to gain minimalism (the color is the only thing). The context is delivered through accompanying text in the original publications, not through the chart itself.

3. Scientific rigor vs. shareability. The chart sacrifices the appearance of scientific rigor (no error bars, no methodology note, no caveats) to gain shareability (it is small, striking, and memorable). Hawkins understood that for a chart to spread, it had to be instantly recognizable, which meant stripping non-essential elements.

4. Technical correctness vs. emotional effect. The chart is technically correct — every bar accurately represents the corresponding year's anomaly on the colormap — but it is designed for emotional effect more than for analytical use. A scientist would not use it as the primary chart in a research paper, but the same scientist might use it as the hook for a public talk.

These trade-offs are deliberate and defensible. The warming stripes are not trying to replace the line chart of climate data; they are a complement to it, serving a different purpose for a different audience. Understanding the trade-offs is part of understanding why the chart works.

The Impact

The warming stripes became, within two years of their release, one of the most-shared climate visualizations in history. Specific examples of their impact:

Social media virality. The image was shared by scientists, journalists, activists, and ordinary users across Twitter, Facebook, and Instagram. The hashtag #ShowYourStripes (introduced by Hawkins) let anyone generate warming stripes for their own country, region, or city using a free tool at showyourstripes.info. Millions of personalized stripes were generated and shared.

Book covers and publications. Greta Thunberg's book No One Is Too Small to Make a Difference (2019) used the warming stripes on the cover. Multiple other climate books followed. The image appeared on the cover of Nature Climate Change and in many other scientific journals, not as the primary figure but as a symbol.

Public art and activism. The stripes were projected on the Sydney Opera House, the White House, and other prominent buildings. Climate marches carried banners with the stripes. Activists wore t-shirts and face masks. The image became a visual identity for the climate movement in a way no other chart had achieved.

Educational use. Schools around the world adopted the warming stripes as a teaching tool. Climate curricula at the primary, secondary, and university level use them as the "look at this" moment that introduces the topic. Teachers report that the stripes produce stronger emotional reactions from students than traditional line charts.

Media adoption. The BBC, The Guardian, The New York Times, and other major outlets have used the stripes in climate coverage. When the UK Met Office issued temperature records, some outlets ran the corresponding warming stripes alongside the numerical announcement.

Inspiration for other visualizations. The warming stripes inspired a wave of similar "stripped down" climate visualizations: spiral plots, animated heat maps, and other minimalist forms that prioritize impact over precision. They also inspired non-climate visualizations using the same pattern: showing trends in other data domains through colored stripes rather than lines or bars.

The broader impact: the warming stripes showed that a technically simple chart, applied with disciplined design decisions, could achieve what years of more elaborate visualizations had not. The chart did not contain new data. It did not reveal new findings. It did not add to scientific knowledge. It communicated existing knowledge more effectively than any previous chart. And the improvement came from subtraction — removing elements that other charts took for granted.

Why It Works: A Theoretical Analysis

The warming stripes succeed for reasons that connect to principles from every chapter of Parts I and II.

1. The color is the encoding. Chapter 2 ranked visual channels by perceptual accuracy, and Chapter 3 explained the perceptual science of color. The warming stripes use color luminance (not just hue) as the primary encoding — blue is dark, red is also dark at the extreme, and the midpoint is light. The eye reads the sequence of luminances as a clear narrative without needing to interpret numeric values.

2. The diverging palette has a natural midpoint. Red-blue with white in the middle is a standard diverging palette. It works because the data has a meaningful midpoint (the baseline temperature) and two directions (warmer, colder). A sequential palette would have worked less well because it would not emphasize the direction of change; a qualitative palette would have been meaningless.

3. The minimalism forces the eye to the color. Chapter 6's declutter procedure says "remove everything that does not earn its place." The warming stripes take this principle to its logical extreme: they remove everything except the bars and their colors. The absence of competing elements makes the color shift unavoidable. A cluttered version (with axes, labels, gridlines, title) would distract from the encoding.

4. The sequence tells a story. Chapter 9's threshold concept says that the sequence of charts is an argument. Here, the "sequence" is internal to a single chart — the left-to-right reading of the stripes, from blue to red, tells the warming story as a narrative inside the image. The chart has a beginning (blue, past) and an end (red, present), and the transition between them is the finding.

5. It passes the 5-second test dramatically. Chapter 7's 5-second test asks whether a reader can understand a chart in five seconds. The warming stripes pass in about one second — the color shift is unmistakable, the direction is clear, the meaning is instantaneous. For a public audience with limited attention, this is exactly the design target.

6. It sacrifices what it does not need. The chart does not need precise values, because the target audience does not need precise values. The chart does not need axis labels, because the color encodes the meaning. The chart does not need a title, because the context (when it is shown as "climate data") provides the framing. Every element that a technical chart would include has been stripped because it does not serve the specific audience and use case.

7. It is shareable. The chart is small, square-ish, and visually distinctive. It works at a thumbnail size, at a full-screen size, and anywhere in between. It works on social media, on a t-shirt, on a poster, on a book cover. This shareability is a design choice: the chart was optimized for the constraints of modern visual media, not for the constraints of a PDF report.

Complications and Counter-Arguments

The warming stripes are celebrated but also critiqued. Several legitimate criticisms:

The chart sacrifices too much information. Scientists have pointed out that the warming stripes strip away so much context that the chart could mislead viewers who interpret it without knowing the underlying data. A viewer who does not know the time range could misread the stripes. A viewer who does not know the baseline could misunderstand the direction of change. The chart relies on external context to be interpretable, which violates the self-explanatory standard from Chapter 7.

It is not a substitute for rigorous visualization. The stripes are a communication tool for public audiences, not an analytical tool for scientists. Some users have tried to treat the stripes as the primary climate chart in scientific contexts, where they are out of place. The chart's effectiveness in one context does not transfer to all contexts.

It reduces a complex phenomenon to a single dimension. The warming stripes show global temperature as one number per year. The actual climate system is vastly more complex: regional variation, seasonality, ocean versus land, atmospheric circulation, feedbacks. The stripes compress all this complexity into a single color per year, which can mislead viewers who think the stripes tell the whole story.

The colormap choice is debatable. Red-blue with white in the middle is a diverging palette, but not the only choice. Some scientists argue that a sequential palette (only shades of red, with darker = warmer) would be more honest because it does not imply a symmetry between warm and cold anomalies that does not exist in the data. Others defend the diverging palette because the baseline is a meaningful midpoint. The choice is defensible both ways, but it is a choice.

Not everyone responds emotionally. The stripes work best for viewers who are already predisposed to care about climate change. For viewers who are skeptical, the stripes do not add new information and may come across as alarmist. The chart's emotional impact is effective for some audiences and not for others, which is a limit on its universal effectiveness.

Lessons for Modern Practice

Most practitioners will not create a viral climate visualization. But the warming stripes offer lessons that apply to any design decision.

1. Different audiences need different charts. The warming stripes are not a replacement for the scientific line chart; they are a complement. The right chart depends on the audience and the purpose. A scientist reading a research paper needs different information than a general reader scrolling social media. Design for the specific audience, not for a hypothetical universal audience.

2. Minimalism can be effective — but requires discipline. The warming stripes strip away more than most charts would dare, and the result is effective because the removal is deliberate. If you remove elements without understanding why, you get a broken chart; if you remove elements to let the core encoding dominate, you get a focused chart. Know what you are removing and why.

3. Color can do the work of other encodings. The chart uses color luminance (plus hue) as the primary encoding, not bar height or line position. This is an unusual choice that works here because the data has a natural midpoint and the audience is not trying to read precise values. In other contexts, color as the sole encoding would be wrong; here, it is exactly right.

4. Context lives outside the chart sometimes. The warming stripes rely on context provided externally — the viewer knows this is climate data, knows it runs from the past to the present, knows that red is warmer. This violates Chapter 7's self-explanatory standard but works in contexts where the external framing is reliable. Know when you can rely on external context and when you cannot.

5. Shareability is a design constraint. For a chart that is meant to be shared on social media or displayed on products, shareability is a real design constraint. The warming stripes are small, square-ish, and visually distinctive because those are properties that make them shareable. Charts that are 16:9 widescreen or that require high-resolution zooming to read do not share as well.

6. Technical simplicity is not shallow. The warming stripes are 25 lines of matplotlib code. They are technically simple. But the design decisions behind those 25 lines are sophisticated, and the impact is disproportionate to the technical complexity. Do not mistake technical simplicity for lack of thought. The best charts often use the simplest primitives applied with the most discipline.

7. Test by sharing. Hawkins did not know the warming stripes would become viral. He released them to see what would happen. If you are making a chart for a public audience, share it with a few test readers and watch their reactions. The chart that works is often the chart that produces an emotional response you can see on the viewer's face.


Discussion Questions

  1. On the trade-off between precision and impact. The warming stripes sacrifice precision for impact. This is the opposite of what Chapters 4 and 7 recommended (full context, self-explanatory, source attribution). Are these trade-offs legitimate, or do they compromise the ethical standards the book has been building? Where is the line?

  2. On audience-specific design. The warming stripes were designed for a general public audience, not for scientists. Can a single chart serve both audiences, or is some audience-specific redesign always necessary? What would the "scientist version" of the warming stripes look like?

  3. On the colormap choice. The chart uses a diverging red-blue palette. Is this the right choice, or would a sequential palette be more honest? What does each choice say about the message the chart is trying to send?

  4. On minimalism as a design philosophy. The chart takes Chapter 6's declutter procedure to an extreme. Can minimalism go too far? At what point does removing elements cross the line from "focused" to "misleading"?

  5. On shareability as a design goal. The warming stripes were optimized for sharing on social media and printing on products. Is shareability a legitimate design goal for technical visualization, or does it compromise the rigor that scientific charts should have?

  6. On reproducing the chart. The warming stripes are 25 lines of matplotlib code. Could you produce a version for a different dataset — temperature in your own region, your own city, your own industry? What would you change, and what would you keep?


The warming stripes are a minimalist bar chart. Technically, they are among the simplest chart types in this chapter. But they demonstrate a specific lesson: design discipline applied to the simplest primitives can produce effects that elaborate tools and complex chart types cannot. The chart is 25 lines of matplotlib. The thinking behind those 25 lines is what separates a thoughtful visualization from a default one. The next time you reach for an elaborate chart type to try to make an impact, remember the warming stripes — and consider whether a simpler chart with more disciplined design might do the job better.