Таблица выбора: какой график под какой вопрос
Тип графика диктуется не вкусом, а вопросом к данным.
Выбор типа графика — это сопоставление структуры данных и аналитического вопроса (распределение? зависимость? динамика? сравнение?) подходящему виду визуализации.
Сначала вопрос, потом график
Новички выбирают график по привычке («сделаю столбики»). Профессионал начинает с вопроса: что я хочу показать? Ответ задаёт семейство графиков. Есть четыре базовых вопроса, и под каждый — свой инструментарий.
| Вопрос к данным | Подходящие графики | Канал |
| Как распределена одна величина? | гистограмма, KDE, boxplot, violin, dot plot | позиция, длина |
| Как связаны две величины? | scatter, линия тренда, hexbin | позиция (XY) |
| Как меняется во времени? | линия, area, точки с линией | позиция + связность |
| Как сравнить категории? | столбцы, dot plot, lollipop | длина, позиция |
| Из чего состоит целое? | столбцы с накоплением (осторожно с pie) | длина |
| Как связаны две категории? | heatmap, мозаичный график | цвет, площадь |
Размерность решает
Второй критерий — сколько переменных и какого они типа. Одна числовая переменная — это про распределение (гистограмма). Две числовых — про зависимость (scatter). Числовая против времени — динамика (линия). Числовая против категории — сравнение (столбцы). Две категории и счётчик — таблица сопряжённости (heatmap). Запомнив эту решётку «тип×тип → график», вы перестанете гадать.
Маленький помощник выбора
Запишем правило в виде функции — это и есть формализация таблицы. Она по типам переменных подсказывает график.
def suggest(n_num, n_cat, time=False):
if time and n_num >= 1:
return "линия (динамика во времени)"
if n_num == 1 and n_cat == 0:
return "гистограмма / KDE / boxplot (распределение)"
if n_num == 2 and n_cat == 0:
return "scatter (зависимость)"
if n_num == 1 and n_cat == 1:
return "столбцы или boxplot по категориям (сравнение)"
if n_num == 0 and n_cat == 2:
return "heatmap (связь двух категорий)"
return "подумать ещё: много переменных -> фасетки"
print(suggest(1, 0))
print(suggest(2, 0))
print(suggest(1, 0, time=True))
print(suggest(1, 1))Вывод:
гистограмма / KDE / boxplot (распределение) scatter (зависимость) линия (динамика во времени) столбцы или boxplot по категориям (сравнение)
Как работает под капотом
За таблицей стоит идея «грамматики графики» (Уилкинсон, Уикхем): график — это сопоставление переменных эстетикам (позиция, цвет, размер) плюс геометрический объект (точка, линия, столбец). Тип данных ограничивает осмысленные сопоставления: непрерывную переменную естественно класть на ось координат, категориальную — на цвет или фасетку. Решётка выбора — это просто перечень осмысленных комбинаций.
Грамматика графики на практике
Идея «грамматики графики» перевернула то, как строят визуализации. Вместо заучивания десятков «типов диаграмм» вы оперируете несколькими составляющими: данные, эстетические отображения (что на X, что на Y, что в цвете), геометрический объект (точка, линия, столбец), при необходимости — статистическое преобразование (биннинг для гистограммы, сглаживание для тренда) и фасетирование. Любой «тип графика» получается их комбинацией. Гистограмма — это столбцы поверх биннинга; scatter — точки без преобразования; линия тренда — линия поверх регрессии.
Такой взгляд освобождает: вы не ограничены готовым меню, а собираете нужное под задачу. Например, «boxplot по группам с наложенными точками» — это просто две геометрии (ящик и точки) на одних осях. Понимание грамматики делает выбор графика осознанным конструированием, а не угадыванием, и объясняет, почему библиотеки вроде ggplot2 (R) и Vega-Lite устроены именно так.
Частые ошибки
- Столбцы для непрерывной X — для непрерывной величины нужна гистограмма или линия, а не категориальные столбцы.
- Линия между несвязанными категориями — линия подразумевает порядок/непрерывность (время), нельзя соединять «яблоки» и «груши».
- Scatter для одной переменной — для распределения нужна гистограмма, а не точки в ряд.
- Pie для сравнения — почти всегда лучше столбцы (см. следующий урок).
Итог
- Сначала вопрос к данным, потом тип графика.
- Четыре базовых вопроса: распределение, зависимость, динамика, сравнение.
- Типы переменных задают осмысленные сопоставления.
- Много переменных — разбивайте на фасетки.