Как графики лгут и как не лгать
Один и тот же набор данных можно показать честно или как сенсацию. Разница — в осях, масштабе и выборе графика.
«График лжёт не цифрами, а кодированием. Обрезанная ось не меняет данные — она меняет то, что видит глаз».
Визуализация — мощный инструмент убеждения, и потому опасный. Большинство искажений не подделывают цифры: они манипулируют кодированием. Зная приёмы, вы и сами не соврёте, и распознаете манипуляцию в чужих графиках.
Почему это особенно важно понимать сегодня? Графики стали валютой публичной аргументации: ими оперируют в новостях, в постах, в презентациях инвесторам и на совещаниях. Большинство зрителей считывает форму графика мгновенно и доверяет ей сильнее, чем сопровождающему тексту, — а проверять оси и масштаб привычки почти ни у кого нет. Это делает визуальную манипуляцию дешёвой и эффективной: достаточно сдвинуть начало оси, и аудитория унесёт «во столько-то раз», даже если в подписи честно стоят настоящие числа. Грамотность в чтении графиков — это сегодня такой же базовый навык защиты от дезинформации, как умение проверять источник.
Ключевая мысль, которую стоит держать в голове: данные и их визуальное кодирование — разные вещи. Числа 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 для обычных данных.
- Масштабируйте символы по площади, а не по линейному размеру.
- Показывайте полный контекст диапазона.
Итог: вы умеете распознавать и не создавать ложь. Дальше — позитивная программа: цвет и типографика честного графика.