Как графики лгут и как не лгать

Один и тот же набор данных можно показать честно или как сенсацию. Разница — в осях, масштабе и выборе графика.

«График лжёт не цифрами, а кодированием. Обрезанная ось не меняет данные — она меняет то, что видит глаз».

Визуализация — мощный инструмент убеждения, и потому опасный. Большинство искажений не подделывают цифры: они манипулируют кодированием. Зная приёмы, вы и сами не соврёте, и распознаете манипуляцию в чужих графиках.

Почему это особенно важно понимать сегодня? Графики стали валютой публичной аргументации: ими оперируют в новостях, в постах, в презентациях инвесторам и на совещаниях. Большинство зрителей считывает форму графика мгновенно и доверяет ей сильнее, чем сопровождающему тексту, — а проверять оси и масштаб привычки почти ни у кого нет. Это делает визуальную манипуляцию дешёвой и эффективной: достаточно сдвинуть начало оси, и аудитория унесёт «во столько-то раз», даже если в подписи честно стоят настоящие числа. Грамотность в чтении графиков — это сегодня такой же базовый навык защиты от дезинформации, как умение проверять источник.

Ключевая мысль, которую стоит держать в голове: данные и их визуальное кодирование — разные вещи. Числа 100 и 105 объективны, но их можно закодировать длиной столбика, площадью круга, наклоном линии или позицией на оси — и каждое кодирование по-своему точное или обманчивое. Эдвард Тафти формализовал это понятием lie factor (коэффициент лжи) — отношения «размера эффекта, который показывает график» к «размеру эффекта в данных». У честного графика он равен единице; всё, что заметно больше или меньше, — сигнал искажения. Дальше мы посчитаем его руками.

Каталог искажений

  • Обрезанная ось Y на bar: разница в 2% выглядит как разница в 3 раза.
  • Двойная ось Y: две шкалы подгоняют так, что линии «коррелируют» искусственно.
  • 3D: перспектива искажает высоты и площади.
  • Площадь вместо длины: удвоили и высоту, и ширину иконки — площадь выросла в 4 раза.
  • Инвертированная ось: рост выглядит падением.
  • Cherry-picking диапазона: показан только удобный отрезок времени.
ЭФФЕКТ ОБРЕЗАННОЙ ОСИ (одни и те же числа 100 и 105)
   ось от 0            ось от 95
   105 | ##########    105 | ##########
   100 | #########     100 | #
       +----------         +----------
   разница ~5%         разница "выглядит" огромной

Как работает под капотом

Глаз сравнивает длину столбика от его основания. Если основание не ноль, физическая длина перестаёт быть пропорциональна значению — мозг всё равно читает «во столько раз выше». То же с площадью: удвоение линейного размера учетверяет площадь, но автор «имел в виду» удвоение. Двойная ось обманывает, потому что зритель не видит, что у линий разные шкалы.

Посчитаем, во сколько раз обрезанная ось преувеличивает разницу — это и есть «коэффициент лжи».

# Коэффициент искажения обрезанной оси (lie factor по идее Тафти)
a, b = 100, 105            # реальные значения
true_ratio = (b - a) / a   # реальная разница, доли

axis_start = 95            # обрезанное основание оси
shown_a = a - axis_start
shown_b = b - axis_start
shown_ratio = (shown_b - shown_a) / shown_a   # видимая "разница"

print("Реальная разница: {:.1%}".format(true_ratio))
print("Видимая разница:  {:.1%}".format(shown_ratio))
print("Преувеличение в", round(shown_ratio / true_ratio, 1), "раз")

«Попробуй сам ▶» — двигайте axis_start ближе к данным и смотрите, как растёт преувеличение. При основании 99 разница «раздувается» в десятки раз.

Частые ошибки

Невольно обрезать ось «чтобы лучше было видно различия» — это и есть искажение. Двойная ось без явного предупреждения. 3D для «солидности». Иконки, масштабированные по обоим измерениям. Произвольный выбор временного окна.

Добавим ещё несколько приёмов, на которых легко обмануться. Нарушение пропорций в круговой диаграмме: доли, которые не суммируются в 100%, или сектора, нарисованные «на глаз» без привязки к углу, — глаз сравнивает площади секторов, и малейшая неточность угла искажает восприятие доли. Перевёрнутый или нелинейный масштаб без предупреждения: логарифмическая ось абсолютно законна для величин, растущих на порядки, но если зритель не заметил подпись «log», он прочитает экспоненциальный рост как почти линейный. Накопительная (cumulative) ось вместо обычной: накопленная сумма всегда только растёт, поэтому даже падающие продажи на такой оси выглядят как уверенный рост вверх.

И две ошибки, связанные не с осями, а с выборкой данных за графиком. Игнорирование размера выборки: bar chart показывает «средний чек 5000 против 4800», но за первым столбиком три наблюдения, а за вторым — три тысячи; различие статистически призрачно, а график подаёт его как факт. Подмена абсолютных чисел и долей: рост «в два раза» звучит грозно, но если речь о двух случаях против одного на миллион, честнее показать долю. Хороший приём самопроверки — всегда мысленно спрашивать: «а что именно закодировано высотой/площадью/цветом, и совпадает ли это с тем, что я хочу сказать?»

Best practices

  • Для bar — ось значений всегда от нуля.
  • Избегайте двойных осей; лучше два графика рядом.
  • Никакого 3D для обычных данных.
  • Масштабируйте символы по площади, а не по линейному размеру.
  • Показывайте полный контекст диапазона.

Итог: вы умеете распознавать и не создавать ложь. Дальше — позитивная программа: цвет и типографика честного графика.

Проверьте себя
1. Почему обрезанная (не от нуля) ось Y на bar chart искажает данные?
AЗамедляет рендеринг
BДлина столбика перестаёт быть пропорциональна значению, преувеличивая различия
CМеняет сами числа в данных
DЛомает легенду
2. Почему опасно масштабировать иконку по обоим линейным размерам для удвоения значения?
AИконка станет нечёткой
BПлощадь вырастет в 4 раза, хотя значение лишь удвоилось
CЦвет исказится
DЭто медленно