21  Creating Good Charts

Published

February 19, 2025

21.1 Objectives

  • Understand what features make graphics effective
  • Evaluate existing charts for accessibility and readability
  • Make improvements to charts to increase comprehension and accessibility

A chart is good if it allows the user to draw useful conclusions that are supported by data. Obviously, this definition depends on the purpose of the chart - a simple EDA chart is going to have a different purpose than a chart showing e.g. the predicted path of a hurricane, which people will use to make decisions about whether or not to evacuate.

Unfortunately, while our visual system is amazing, it is not always as accurate as the computers we use to render graphics. We have physical limits in the number of colors we can perceive, our short term memory, attention, and our ability to accurately read information off of charts in different forms.

21.2 Perceptual and Cognitive Factors

21.2.1 Preattentive Features

You’ve almost certainly noticed that some graphical tasks are easier than others. Part of the reason for this is that certain tasks require active engagement and attention to search through the visual stimulus; others, however, just “pop” out of the background. We call these features that just “pop” without active work preattentive features; technically, they are detected within the first 250ms of viewing a stimulus [1].

Take a look at Figure 21.1; can you spot the point that is different?

(a) Shape
(b) Color
Figure 21.1: Two scatterplots with one point that is different. Can you easily spot the different point?

Color and shape are commonly used graphical features that are processed pre-attentively. Some people suggest utilizing this to pack more dimensions into multivariate visualizations [2], but in general, knowing which features are processed more quickly (color/shape) and which are processed more slowly (combinations of preattentively processed features) allows you to design a chart that requires less cognitive effort to read.

As awesome as it is to be able to use preattentive features to process information, we should not use combinations of preattentive features to show different variables. Take a look at Figure 21.2 - part (a) shows the same grouping in color and shape, part (b) shows color and shape used to encode different variables.

(a) Shape and Color (dual encoded)
(b) Shape and Color (different variables)
Figure 21.2: Two scatterplots. Can you easily spot the different point(s)?

Here, it is easy to differentiate the points in Figure 21.2(a), because they are dual-encoded. However, it is very difficult to pick out the different groups of points in Figure 21.2(b) because the combination of preattentive features requires active attention to sort out.

Takeaways

Careful use of preattentive features can reduce the cognitive effort required for viewers to perceive a chart.

Encode only one variable using preattentive features, as combinations of preattentive features are not processed preattentively.

21.2.2 Color

Our eyes are optimized for perceiving the yellow/green region of the color spectrum, as shown in Figure 21.3. Why? Well, our sun produces yellow light, and plants tend to be green. It’s pretty important to be able to distinguish different shades of green (evolutionarily speaking) because it impacts your ability to feed yourself. There aren’t that many purple or blue predators, so there is less selection pressure to improve perception of that part of the visual spectrum.

Figure 21.3: Sensitivity of the human eye to different wavelengths of visual light (Image from Wikimedia commons)

Not everyone perceives color in the same way. Some individuals are colorblind or color deficient [3]. We have 3 cones used for color detection, as well as cells called rods, which detect light intensity (brightness/darkness). In about 5% of the population (10% of XY individuals, <1% of XX individuals), one or more of the cones may be missing or malformed, leading to color blindness - a reduced ability to perceive different shades. The rods, however, function normally in almost all of the population, which means that light/dark contrasts are extremely safe, while contrasts based on the hue of the color are problematic in some instances.

You can take a test designed to screen for colorblindness here

Your monitor may affect how you score on these tests - I am colorblind, but on some monitors, I can pass the test, and on some, I perform worse than normal. A different test is available here.

My results on one monitorMy results on a monitor that has a different tech and supposedly higher color fidelity

The Munsell colorblindness test In reality, I know that I have issues with perceiving some shades of red, green, and brown. I have particular trouble with very dark or very light colors, especially when they are close to grey or brown.

In addition to colorblindness, there are other factors than the actual color value which are important in how we experience color, such as context.

(a) The original illusion
(b) The illusion with the checkerboard and shadow removed
Figure 21.4: The color constancy illusion. The squares marked A and B are actually the same color.

Our brains are extremely dependent on context and make excellent use of the large amounts of experience we have with the real world. As a result, we implicitly “remove” the effect of things like shadows as we make sense of the input to the visual system. This can result in odd things, like the checkerboard and shadow shown in Figure 21.4 - because we’re correcting for the shadow, B looks lighter than A even though when the context is removed they are clearly the same shade.

21.2.2.1 Takeaways

  • Do not use rainbow color gradient schemes
    • because of the unequal perception of different wavelengths, these schemes are misleading - the color distance does not match the perceptual distance.
  • Avoid any scheme that uses green-yellow-red signaling if you have a target audience that may include colorblind people.
  • To “colorblind-proof” a graphic, you can use a couple of strategies:
    • double encoding - where you use color, use another aesthetic (line type, shape) as well to help your colorblind readers out
    • If you can print your chart out in black and white and still read it, it will be safe for colorblind users. This is the only foolproof way to do it!
    • If you are using a color gradient, use a monochromatic color scheme where possible. This is perceived as light -> dark by colorblind people, so it will be correctly perceived no matter what color you use.
    • If you have a bidirectional scale (e.g. showing positive and negative values), the safest scheme to use is purple - white - orange. In any color scale that is multi-hue, it is important to transition through white, instead of from one color to another directly.
  • Be conscious of what certain colors “mean”
    • Leveraging common associations can make it easier to read a color scale and remember what it stands for
      • blue for cold, orange/red for hot is a natural scale
      • red = Republican and blue = Democrat in the US (since ~1980)
      • white -> blue gradients for showing rainfall totals
    • Some colors can can provoke emotional responses that may not be desirable.1
    • Consider the social baggage that certain color schemes may have
      • pink/blue color scheme often used for gender may be polarizing
      • Consider using a cooler color (blue or purple) for men and a warmer color (yellow, orange, lighter green) for women2.
  • There are packages such as RColorBrewer and dichromat that have color palettes which are aesthetically pleasing, and, in many cases, colorblind friendly (dichromat is better for that than RColorBrewer). You can also take a look at other ways to find nice color palettes.

21.2.3 Short Term Memory

We have a limited amount of memory that we can instantaneously utilize. This mental space, called short-term memory, holds information for active use, but only for a limited amount of time.

Try it out!
Click here, read the information, and then click to hide it.

1 4 2 2 3 9 8 0 7 8

Wait a few seconds, then expand this section

What was the third number?

Without rehearsing the information (repeating it over and over to yourself), the try it out task may have been challenging. Short term memory has a capacity of between 3 and 9 “bits” of information.

In charts and graphs, short term memory is important because we need to be able to associate information from e.g. a key, legend, or caption with information plotted on the graph. As a result, if you try to plot more than ~6 categories of information, your reader will have to shift between the legend and the graph repeatedly, increasing the amount of cognitive labor required to digest the information in the chart.

Where possible, try to keep your legends to 6 or 7 characteristics.

Implications and Guidelines

  • Limit the number of categories in your legends to minimize the short term memory demands on your reader.

    • When using continuous color schemes, you may want to use a log scale to better show differences in value across orders of magnitude.
  • Use colors and symbols which have implicit meaning to minimize the need to refer to the legend.

  • Add annotations on the plot, where possible, to reduce the need to re-read captions.

21.2.4 Grouping and Sense-making

Imposing order on visual chaos.

What does Figure 21.5 look like to you?

An ambiguous image: when viewed from the right side, it looks like a duck, and when viewed from the bottom side, it looks like a rabbit. The x and y axes are labeled as 'rabbit' and 'duck', respectively.
Figure 21.5: Is it a rabbit, or a duck?

When faced with ambiguity, our brains use available context and past experience to try to tip the balance between alternate interpretations of an image. When there is still some ambiguity, many times the brain will just decide to interpret an image as one of the possible options.

An Illusory contour. It appears to be 3 black circles arranged in a downward-pointing triangle, with a black outline of a triangle pointing upward, and a background-colored (white) downward pointing triangle overlaid on top of the two previously described triangles. In reality, what is shown is a sequence of three pac-man shapes, with the missing pieces oriented inwards, at approximately 30, 150, and 270 degrees from the positive x-axis, with three 60 degree acute angle shapes oriented at 90, 210, and 330 degrees from the positive x-axis. The appearance of two triangles superimposed is an illusory contour that results from Gestalt heuristics.

Consider this image - what do you see?

Did you see something like “3 circles, a triangle with a black outline, and a white triangle on top of that”? In reality, there are 3 angles and 3 pac-man shapes. But, it’s much more likely that we’re seeing layers of information, where some of the information is obscured (like the “mouth” of the pac-man circles, or the middle segment of each side of the triangle). This explanation is simpler, and more consistent with our experience.

Now, look at the logo for the Pittsburgh Zoo.

The logo of the Pittsburgh Zoo, which manipulates figure-ground perception. If the black portion of the image is considered the figure, the viewer sees a tree and some birds flying; if the white portion of the image is considered the figure, then the viewer sees a gorilla facing a lion, with some fish jumping above the waves at the bottom of the image. When viewed for several minutes, the figure and ground tend to 'flip' back and forth.

Do you see the gorilla and lionness? Or do you see a tree? Here, we’re not entirely sure which part of the image is the figure and which is the background.

The ambiguous figures shown above demonstrate that our brains are actively imposing order upon the visual stimuli we encounter. There are some heuristics for how this order is applied which impact our perception of statistical graphs.

The catchphrase of Gestalt psychology is

The whole is greater than the sum of the parts

That is, what we perceive and the meaning we derive from the visual scene is more than the individual components of that visual scene.

The word GESTALT, written such that there is a white bar over the G, illustrating the principle of closure, the E is made up of black squares, indicating proximity, the S has a bar going through it such that the middle part of the S is behind the bar, illustrating continuation, the Ts are both striped, illustrating similarity, and the A and L are smushed together, with a tree appearing within the A (the bar is missing across the A) to illustrate figure/ground.

The Gestalt Heuristics help us to impose order on ambiguous visual stimuli

You can read about the gestalt rules here, but they are also demonstrated in the figure above.

In graphics, we can leverage the Gestalt principles of grouping to create order and meaning. If we color points by another variable, we are creating groups of similar points which assist with the perception of groups instead of individual observations. If we add a trend line, we create the perception that the points are moving “with” the line (in most cases), or occasionally, that the line is dividing up two groups of points. Depending on what features of the data you wish to emphasize, you might choose different aesthetics mappings, facet variables, and factor orders.

Caution

Suppose I want to emphasize the change in life expectancy between 1982 and 2007. For this, we’ll use the Gapminder [4] data which is found in the gapminder packages in R and python.

I could use a bar chart (showing only 4 countries for space):

library(gapminder)

library(dplyr)

gapminder %>%
  filter(year %in% c(1982, 2007)) %>%
  filter(country %in% c("Korea, Rep.", "China", "Afghanistan", "India")) %>%
  ggplot(aes(x = country, y = lifeExp, fill = factor(year))) +
  geom_col(position = "dodge") +
  coord_flip() +
  ylab("Life Expectancy")

# %pip install gapminder
from gapminder import gapminder
import pandas as pd
import seaborn.objects as so

my_gap_82_07 = my_gap[my_gap.year.isin([1982,2007])]
## NameError: name 'my_gap' is not defined
subdata = my_gap_82_07[my_gap_82_07.country.\
    isin(["Korea, Rep.", "China", "Afghanistan", "India"])]
## NameError: name 'my_gap_82_07' is not defined
subdata = subdata.assign(yearFactor=pd.Categorical(subdata.year))
## NameError: name 'subdata' is not defined

plot = so.Plot(subdata, x = "country", y = "lifeExp", color = "yearFactor").\
  add(so.Bar(), so.Dodge()).\
  label(y = "Life Expectancy")
## NameError: name 'subdata' is not defined
plot.show()
## NameError: name 'plot' is not defined

Or, I could use a line chart

gapminder %>%
  filter(year %in% c(1982, 2007)) %>%
  filter(country %in% c("Korea, Rep.", "China", "Afghanistan", "India")) %>%
  ggplot(aes(x = year, y = lifeExp, color = country)) +
  geom_line() +
  ylab("Life Expectancy")

subdata2 = my_gap_82_07[my_gap_82_07.country.\
    isin(["Korea, Rep.", "China", "Afghanistan", "India"])]
## NameError: name 'my_gap_82_07' is not defined

plot = so.Plot(subdata, x = "year", y = "lifeExp", color = "country").\
  add(so.Lines()).\
  label(y = "Life Expectancy")
## NameError: name 'subdata' is not defined
plot.show()
## NameError: name 'plot' is not defined

Or, I could use a box plot

gapminder |>
  filter(year %in% c(1982, 2007)) |>
  ggplot(aes(x = factor(year), y = lifeExp)) + 
  geom_boxplot() + 
  ylab("Life Expectancy")

import seaborn as sns

subdata3 = my_gap_82_07.assign(yearFactor=pd.Categorical(my_gap_82_07.year))
## NameError: name 'my_gap_82_07' is not defined

sns.boxplot(data = subdata3, x = "year", y = "lifeExp")
## NameError: name 'subdata3' is not defined
plt.show()

Which one best demonstrates that in every country, the life expectancy increased?

The line segment plot connects related observations (from the same country) but allows you to assess similarity between the lines (e.g. almost all countries have positive slope). The same information goes into the creation of the other two plots, but the bar chart is extremely cluttered, and the boxplot doesn’t allow you to connect single country observations over time. So while you can see an aggregate relationship (overall, the average life expectancy increased) you can’t see the individual relationships.

The aesthetic mappings and choices you make when creating plots have a huge impact on the conclusions that you (and others) can easily make when examining those plots.3

21.3 Representing Data Accurately

In order to read data off of a chart correctly, several things must happen in sequence:

  1. The data must be accurately written to the chart, that is, the transformation from data -> geometry must be accurate
  2. The geometric objects that make up the chart must be perceived accurately - the mapping from geometric object size or location to mental model of geometric object size or location must be correct.
  3. The mental model of geometric object size or location must be accurately converted to a numerical value. We know that this isn’t lossless, but we hope that this is at least reasonably accurate.

If step 1 is not done correctly, the chart is misleading or inaccurate. However, steps 2 and 3 depend on our brains accurately perceiving and estimating information mentally. These steps can involve a lot of effort, and as mental effort increases, we tend to take shortcuts. Sometimes, these shortcuts work well, but not always.

When you design a chart, it’s good to consider what mental tasks viewers of your chart need to perform. Then, ask yourself whether there is an equivalent way to represent the data that requires fewer mental operations, or a different representation that requires easier mental calculations.

A chart with two panels. The left panel is labeled 'Aligned scale' and features three lines of different lengths which all start at the bottom of the chart. The right panel is labeled 'Unaligned scale' and features three lines of different lengths which start at different locations.  It is easier to compare the lengths of the lines in the left panel, since they all start in the same place.

Which of the lines is the longest? Shortest? It is much easier to determine the relative length of the line when the ends are aligned. The three lines have the same length in both panels, but the operation is much more difficult when the lines do not start or end at the same place.

When making judgments corresponding to numerical quantities, there is an order of tasks from easiest (1) to hardest (6), with equivalent tasks at the same level.4

  1. Position (common scale)
  2. Position (non-aligned scale)
  3. Length, Direction, Angle, Slope
  4. Area
  5. Volume, Density, Curvature
  6. Shading, Color Saturation, Color Hue

If we compare a pie chart and a stacked bar chart, the bar chart asks readers to make judgments of position on a non-aligned scale, while a pie chart asks readers to assess angle. This is one reason why pie charts tend not to be a good general option – people must compare values using area or angle instead of position or length, which is a more difficult judgment under most circumstances. When there are a limited number of categories (2-4) and you have data that is easily compared to quarters of a circle, it may be justifiable to use a pie chart over a stacked bar chart - some studies have shown that pie charts are preferable under these conditions. As a general rule, though, we have an easier time comparing position than angle or area.

A stacked bar chart showing the proportion of people living in North America by country

Stacked bar and pie charts showing the relative proportion of people in North America living in the US, Canada, and Mexico in 2007. Which chart is easier to read relative information (e.g. there are about 3x as many people living in Mexico as Canada) from? Which chart is easier to estimate raw proportions (e.g. the US makes up about 70% of the population of North America) from?

A pie chart showing the proportion of people living in North America by country

Stacked bar and pie charts showing the relative proportion of people in North America living in the US, Canada, and Mexico in 2007. Which chart is easier to read relative information (e.g. there are about 3x as many people living in Mexico as Canada) from? Which chart is easier to estimate raw proportions (e.g. the US makes up about 70% of the population of North America) from?

When creating a chart, it is helpful to consider which variables you want to show, and how accurate reader perception needs to be to get useful information from the chart. In many cases, less is more - you can easily overload someone, which may keep them from engaging with your chart at all. Variables which require the reader to notice small changes should be shown on position scales (x, y) rather than using color, alpha blending, etc.

Consider the hierarchy of graphical tasks again. You may notice a general increase in dimensionality from 1-3 to 4 (2d) to 5 (3d). In general, showing information in 3 dimensions when 2 will suffice can be misleading. Just how misleading depends a lot on the type of chart you’re using. Most of the time, the addition of an extra dimension causes an increase in chart area allocated to the item that is disproportionate to the actual numerical value being represented.

A three-dimensional pie chart, where each of the sections has a different height - this seems to double-encode the value represented by the angle of the pie slice. As a result, the area of the chart devoted to one sector is vastly larger than the area of the chart devoted to the other sectors, even though the true values are not nearly so different.
Figure 21.6: Here, the area and height both encode the same variable, leading to a far disproportionate number of pixels allocated to “Stocks” than “Cash Investments” (h/t Junk Charts). In the first chart, stocks make up 60% of the portfolio, but have 67.5% of the pixels; Cash makes up 5% of the portfolio but those investments represent 2.3% of the pixels.

Ted ED: How to spot a misleading graph - Lea Gaslowitz

Business Insider: The Worst Graphs Ever

Extra dimensions and other annotations are sometimes called “chartjunk” and should only be used if they contribute to the overall numerical accuracy of the chart (e.g. they should not just be for decoration).

21.4 References

[1]
A. Treisman, “Preattentive processing in vision,” Computer Vision, Graphics, and Image Processing, vol. 31, no. 2, pp. 156–177, Aug. 1985, doi: 10.1016/S0734-189X(85)80004-9.
[2]
C. G. Healey, K. S. Booth, and J. T. Enns, “High-speed visual estimation using preattentive processing,” ACM Transactions on Computer-Human Interaction (TOCHI), vol. 3, no. 2, pp. 107–135, 1996, doi: 10.1145/230562.230563.
[3]
Wikipedia contributors, “Color blindness,” Wikipedia, May 2023.
[4]
J. Bryan, Gapminder: Data from gapminder. 2023 [Online]. Available: https://CRAN.R-project.org/package=gapminder
[5]
W. S. Cleveland and R. McGill, “Graphical perception: Theory, experimentation, and application to the development of graphical methods,” Journal of the American statistical association, vol. 79, no. 387, pp. 531–554, 1984, doi: 10.2307/2288400.

  1. When the COVID-19 outbreak started, many maps were using white-to-red gradients to show case counts and/or deaths. The emotional association between red and blood, danger, and death may have caused people to become more frightened than what was reasonable given the available information.↩︎

  2. Lisa Charlotte Rost. What to consider when choosing colors for data visualization.↩︎

  3. See this paper for more details. This is the last chapter of my dissertation, for what it’s worth. It was a lot of fun. (no sarcasm, seriously, it was fun!)↩︎

  4. See this paper for the major source of this ranking; other follow-up studies have been integrated, but the essential order is largely unchanged4. Most of the items in this ranking were not examined in the linked paper, but are a synthesis of different experiments and conceptual knowledge in psychology as well as statistical graphics.↩︎