Skip to main content
Back to module
Data Visualization & Storytelling · Visual Principles

Decluttering

Reading55mLesson 3 of 3 in this module

Remove chart junk step by step so the data and the message are the first things a reader sees.

Why it matters

Every mark on a chart costs the reader a little attention: gridlines, borders, tick marks, legends, background shading, decimal places. Some of those marks help. Many do not. Edward Tufte called the useless ones chart junk and argued for a high data-ink ratio: most of the ink should show data. Cole Nussbaumer Knaflic's Storytelling with Data turns this into a practical habit: remove everything that does not help the message, then add back emphasis where it does.

Decluttering is not about minimalism for its own sake. It is about lowering the effort it takes to see the point.

A decluttering checklist

Work through these in order on any default chart from Excel, Google Sheets or matplotlib:

  1. Remove the chart border and background colour. White space separates the chart well enough.
  2. Remove or lighten gridlines. If you need them for reading values, make them thin and light grey.
  3. Remove the legend when you can label directly. Put the series name at the end of each line, or label bars on the axis. A legend forces eye travel back and forth.
  4. Drop redundant axis labels. If the title says "Monthly revenue ($k)", the y-axis does not need "Revenue in thousands of dollars" as well.
  5. Simplify numbers. Use 1.2M instead of 1,200,000.00, and round labels to the precision that matters.
  6. Sort and group. Sort bars by value. Fold a long tail of tiny categories into "Other".
  7. Use colour on purpose. Make everything grey, then colour only the one series or bar you want people to look at.
  8. Write a takeaway title. Replace "Tickets by category" with "Shipping problems drive the most support tickets".

Worked example

A default chart of support tickets by category has: a grey background, a box border, eight bars in eight different colours, a legend repeating the category names, gridlines every 50 tickets, and values labelled with two decimals.

After decluttering:

  • Bars sorted from most to fewest tickets, with the four smallest categories folded into "Other" (because nobody will act on a bar for 22 tickets).
  • All bars grey except "Shipping", in orange, because that is the category the team will fix next quarter.
  • No legend (the category names are on the axis), no border, no background, no gridlines; each bar has a whole-number label at its end.
  • Title: "Shipping issues are our largest ticket category".

Here is how that chart looks in matplotlib. The data preparation, which you will write in the activity, happens first:

import matplotlib.pyplot as plt

spec = [("Shipping", 530), ("Login", 412), ("Billing", 287), ("Returns", 198), ("Other", 218)]
labels = [label for label, _ in spec]
values = [value for _, value in spec]
colors = ["#d95f02" if label == "Shipping" else "#bbbbbb" for label in labels]

fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.barh(labels, values, color=colors)
ax.invert_yaxis()                      # largest bar at the top
ax.bar_label(bars, padding=3)          # direct labels instead of gridlines
for side in ["top", "right", "bottom"]:
    ax.spines[side].set_visible(False) # remove the box
ax.xaxis.set_visible(False)            # the labels carry the values
ax.set_title("Shipping issues are our largest ticket category", loc="left")
plt.tight_layout()
plt.show()

Notice what each line does: invert_yaxis keeps the sort order reading top to bottom, bar_label puts values where the eye already is, and removing spines strips the frame.

When not to remove things

  • Keep the zero baseline on bar charts.
  • Keep units and sources. A chart without units or a data source is not trustworthy. A small grey footnote ("Source: Zendesk export, Q3 2026") costs almost nothing.
  • Keep context the reader needs, such as a target line or the previous year for comparison. Context is not clutter if it changes the interpretation.
  • Exploratory charts for yourself can stay rough. Declutter the charts other people will see.

Common mistakes

  • Removing axis labels without labelling the data directly, so no values can be read at all.
  • Folding important categories into "Other" just to tidy up. Decide the cut-off from what the audience needs, not from aesthetics.
  • Highlighting with red and green only, which many readers cannot distinguish.
  • Keeping the default title, which describes the chart instead of stating the insight.

Quick recap

  • Default charts carry clutter: borders, heavy gridlines, legends, extra decimals, rainbow colours.
  • Declutter in order: frame, gridlines, legend, labels, numbers, sorting, colour, title.
  • Grey everything, then highlight one thing.
  • Keep baselines, units, sources and context.

Try it

Open the Do tab to write the data preparation behind a decluttered bar chart: sort, fold the tail into "Other", and pick highlight colours.

Also in this lesson: