Как выбрать тип графика
Сначала вопрос — потом график. Тип диаграммы вытекает из того, что вы хотите показать.
«Не выбирайте график потому, что он знаком. Начните с истории, которую хотите рассказать, и пусть она диктует форму».
У новичков типичный путь: «мне нужен график → возьму красивый». У профессионалов наоборот: «у меня есть вопрос → какой график на него отвечает». Существует пять базовых задач визуализации, и для каждой есть свой инструмент.
Почему это важно на практике? Потому что неправильный тип графика не просто «выглядит хуже» — он отвечает не на тот вопрос. Представьте, что руководитель спрашивает: «какой регион лучший по продажам?». Это вопрос сравнения, и честный ответ — отсортированный bar, где взгляд за долю секунды находит самый длинный столбик. Если вместо этого показать line, соединив регионы линией, вы навяжете ложную идею тренда: будто «Север перетекает в Юг». А если показать pie из двенадцати секторов, зритель будет мучительно сравнивать почти одинаковые углы. Один и тот же набор данных, поданный тремя способами, рождает три разных вывода — и только один из них верный. В аналитике стоимость такой ошибки измеряется неверными управленческими решениями, а не эстетикой.
Удобно держать в голове, что выбор графика — это связка трёх вещей: вопроса (что хочу показать), типа переменных (категориальная, числовая, временная) и числа наблюдений. Категориальная против числовой почти всегда даёт bar. Две числовые — scatter. Время против числовой — line. А число наблюдений подсказывает детали: пять категорий укладываются в вертикальный bar, тридцать — лучше в горизонтальный barh, а пятьсот точек динамики просят line вместо набора столбиков. Сначала классифицируйте переменные — и половина решения уже принята автоматически.
Существуют и «гибридные» вопросы, у которых нет одного очевидного ответа. «Как менялось распределение зарплат по годам?» — это распределение плюс динамика; здесь подойдёт серия boxplot по годам или ridgeline-график. «Связаны ли две метрики и как это зависит от сегмента?» — scatter с цветовым кодированием категории. Не пугайтесь таких случаев: разложите вопрос на базовые задачи из списка ниже, и нужный график соберётся из их комбинации. Главное — не хвататься за знакомую форму до того, как сформулирован вопрос.
Пять задач визуализации
- Сравнение категорий — столбчатая диаграмма (bar).
- Динамика во времени — линейный график (line).
- Распределение одной переменной — гистограмма, boxplot, violin.
- Связь двух переменных — диаграмма рассеяния (scatter).
- Состав целого — stacked bar, реже pie.
Это дерево решений. Двигайтесь сверху вниз: от вопроса к структуре данных, от данных — к графику.
Что вы хотите показать?
|
+---------+----------+-----------+-----------+
| | | | |
Сравнение Динамика Распределение Связь Состав
| | | | |
bar/ line/ hist/ scatter/ stacked
barh area box/violin bubble bar/pie
| | | | |
категории время одна две части
vs число vs число числовая числовые целого
Как работает под капотом
Каждый тип графика — это отображение колонок данных на визуальные каналы (оси, цвет, размер). Bar: категория -> ось X, число -> высота. Scatter: число -> X, число -> Y. Понимая это отображение, вы поймёте, почему нельзя строить line по категориям без естественного порядка: линия подразумевает непрерывность.
Прежде чем строить распределение, полезно вручную разложить данные по «корзинам» — это и есть основа гистограммы.
# Раскладываем данные по бинам (корзинам) — основа гистограммы
data = [3, 7, 7, 2, 9, 4, 6, 7, 1, 8, 5, 6, 3, 7, 10, 2, 6, 8]
bin_width = 2
bins = {}
for x in data:
key = (x // bin_width) * bin_width # левая граница бина
bins[key] = bins.get(key, 0) + 1
for left in sorted(bins):
bar = "#" * bins[left]
print("[{:>2}-{:>2}) {:>2} {}".format(left, left + bin_width, bins[left], bar))
«Попробуй сам ▶» — вы только что построили текстовую гистограмму без библиотек. Matplotlib делает ровно это, только рисует прямоугольники вместо символов.
Частые ошибки
Линейный график по категориям без порядка (страны, отделы) — линия ложно намекает на тренд. Pie chart с десятком секторов — глаз не различает близкие углы. Scatter там, где нужна динамика — теряется ось времени. Выбор графика «на глаз» вместо «от вопроса».
Есть и более тонкие промахи. Двойная ось Y (две разные шкалы на одном графике) почти всегда вводит в заблуждение: подгоняя масштабы, можно «доказать» любую корреляцию между несвязанными рядами. Гистограмма для категориальной переменной — ошибка типа данных: гистограмма нужна для непрерывных чисел, а не для названий городов (там нужен bar частот). Stacked bar с пятью и более сегментами — сравнить можно только нижний сегмент, потому что у остальных «плавает» базовая линия. И наконец, попытка втиснуть в один график ответы сразу на три вопроса: перегруженная диаграмма не отвечает чётко ни на один — лучше сделать три простых графика.
Best practices
- Сформулируйте вопрос одним предложением, прежде чем кодить.
- Line — только для упорядоченной оси (время, последовательность).
- Для состава предпочитайте stacked bar пирогу: углы сравнивать труднее, чем длины.
Итог: дерево «вопрос → данные → график» — ваш главный навигатор. Теперь, зная карту, перейдём к инструменту, который умеет рисовать любую её ветку — Matplotlib.