Skip to course content
Free data visualization course

Data Visualization and Dashboard Storytelling

Unit 04.03: Dot plots when bars are too heavy

Past a handful of categories, bars are mostly ink and the values are at the ends.

Dots when there are many categories

Eighteen categories as bars and as dots, compared on ink and on what each supports.

The code sets out the trade.

CATEGORIES = 18
print(f"{CATEGORIES} categories, one value each.\n")
print("as bars:  18 filled rectangles, most of the ink is bar body")
print("as dots:  18 points on a line, the ink is the value itself\n")

for name, ink, when in [
    ("bars", "high", "few categories; zero baseline matters; magnitude is the point"),
    ("dots", "low", "many categories; comparing positions; baseline need not be zero"),
]:
    print(f"{name:6} ink: {ink:5} use when: {when}")

print("""
Dot plots also let you show two values per category -- this year and last --
as two dots joined by a line, in the space one bar would occupy.
""")

A dot plot puts the ink where the value is. It also frees the baseline: since a dot encodes position rather than length, a dot plot may be truncated where a bar chart may not.

And it takes two values per category - this year and last, joined by a line - in the space one bar occupies, which is the same idea as the slope chart applied to categories.

The mistake this prevents

The mistake is using bars for everything because they are familiar. Beyond roughly ten categories the chart becomes a wall of rectangles, and the comparison it exists for gets harder rather than easier.

Takeaway

Use dot plots for many categories or when you need two values each. Bars suit few categories where magnitude from zero is the point.