Таблица выбора: какой график под какой вопрос

Тип графика диктуется не вкусом, а вопросом к данным.

Выбор типа графика — это сопоставление структуры данных и аналитического вопроса (распределение? зависимость? динамика? сравнение?) подходящему виду визуализации.

Сначала вопрос, потом график

Новички выбирают график по привычке («сделаю столбики»). Профессионал начинает с вопроса: что я хочу показать? Ответ задаёт семейство графиков. Есть четыре базовых вопроса, и под каждый — свой инструментарий.

Вопрос к даннымПодходящие графикиКанал
Как распределена одна величина?гистограмма, 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 для сравнения — почти всегда лучше столбцы (см. следующий урок).

Итог

  • Сначала вопрос к данным, потом тип графика.
  • Четыре базовых вопроса: распределение, зависимость, динамика, сравнение.
  • Типы переменных задают осмысленные сопоставления.
  • Много переменных — разбивайте на фасетки.
Проверьте себя
1. Какой график подходит для показа распределения одной числовой величины?
AScatter
BГистограмма, KDE или boxplot
CЛиния времени
DHeatmap
2. С чего начинается грамотный выбор типа графика?
AС выбора цвета
BС вопроса: что именно я хочу показать данными
CС выбора формата файла
DС количества точек
3. Почему нельзя соединять линией значения несвязанных категорий?
AЛиния слишком тонкая
BЛиния подразумевает порядок или непрерывность, которых у категорий нет
CЛинии запрещены в науке
DЭто портит цвет