Small multiples и фасетки
Десять маленьких графиков с общей шкалой читаются лучше одного с десятью линиями.
Small multiples (фасетки) — серия маленьких графиков с одинаковыми осями и масштабом, каждый для своей группы. Они позволяют сравнивать множество категорий, не сваливая всё в один перегруженный график.
Проблема «спагетти»
Когда на одном графике 12 линий разных серий, они переплетаются в нечитаемый клубок («spaghetti plot»). Цветов не хватает, линии пересекаются, легенду не сопоставить. Тафти предложил решение: разбить на маленькие повторяющиеся панели — по одной на серию, — выстроенные в сетку с общими осями. Глаз быстро сканирует сетку, сравнивая форму каждой панели с соседними.
Ключ — общая шкала
Главное правило фасеток: все панели делят один и тот же диапазон осей. Тогда сравнение честно: панель, где линия выше, действительно про большие значения. Если у каждой панели своя автошкала, сравнение ломается — маленькая группа «раздувается» до размера большой. Поэтому при фасетировании всегда фиксируйте общие пределы осей (в библиотеках это sharex=True, sharey=True).
Spaghetti (плохо): Small multiples (хорошо):
все 6 серий в куче A B C
/\/\ /\ /\ _/ /\_
/\/\\//\\/ / \ / _/ \
нечитаемо D E F
\_ /\ __/
общая шкала у всех
Маленький помощник: единая шкала
Чтобы выставить общие пределы осей по всем группам, нужно взять глобальные минимум и максимум. Посчитаем их для нескольких серий.
series = {
"A": [2, 5, 3, 8, 6],
"B": [1, 1, 2, 3, 2],
"C": [10, 12, 9, 11, 14],
}
all_vals = [v for s in series.values() for v in s]
g_min, g_max = min(all_vals), max(all_vals)
pad = (g_max - g_min) * 0.05
print("общие пределы Y для всех фасеток:")
print(" ymin =", round(g_min - pad, 2), " ymax =", round(g_max + pad, 2))
for name, s in series.items():
print(f" {name}: диапазон {min(s)}..{max(s)} (рисуем в общей шкале)")Вывод:
общие пределы Y для всех фасеток: ymin = 0.35 ymax = 14.65 A: диапазон 2..8 (рисуем в общей шкале) B: диапазон 1..3 (рисуем в общей шкале) C: диапазон 9..14 (рисуем в общей шкале)
Все три панели нарисуются в диапазоне 0,35..14,65 — и сразу видно, что серия C систематически выше, а B — низкая. На отдельных автошкалах эту разницу бы потеряли.
Порядок панелей — тоже данные
Сетку фасеток не обязательно упорядочивать алфавитом. Часто полезнее отсортировать по содержательному признаку — по среднему, по тренду, по году. Тогда сама раскладка несёт информацию: глаз видит градиент по сетке. Это приём «упорядоченных small multiples».
Как работает под капотом
Фасетки эксплуатируют сильную сторону зрения — быстрое параллельное сравнение похожих форм (гештальт-сходство). Мозг легко замечает, какая панель «выбивается», если все остальные одинаковы по структуре и масштабу. По сути это перенос сравнения с ненадёжного канала «цвет» (различать 12 линий по цвету) на надёжный «позиция в общей сетке + форма».
Почему фасетки бьют цвет
Когда серий становится много, естественный соблазн — добавить ещё цветов. Но мы уже знаем: предвнимательно различимы лишь 6-8 цветов, дальше глаз путается, а легенда из пятнадцати оттенков нечитаема. Small multiples снимают эту проблему радикально: вместо того чтобы перегружать один график, мы переносим различие категорий на позицию в сетке. Каждая панель занимает своё место, и сравнение идёт не «какой это был цвет?», а «какая панель выше соседних?» — операция, которую зрение выполняет мгновенно и точно.
Тафти назвал small multiples одним из самых сильных приёмов визуализации именно за этот эффект: они масштабируются туда, где обычный график ломается. Двадцать стран на одной линейной диаграмме — каша; двадцать маленьких панелей с общей шкалой — обозримая таблица трендов, по которой глаз скользит, замечая выбивающиеся. Цена — место на листе, но в эпоху больших экранов и векторных PDF это редко проблема. Принцип «лучше много маленьких честных графиков, чем один перегруженный» стоит держать в голове всегда.
Частые ошибки
- Независимые шкалы у панелей — сравнение становится ложным.
- Слишком мелкие панели — теряются детали; лучше меньше панелей, но читаемых.
- Случайный порядок панелей — упустили возможность закодировать признак раскладкой.
- Дублировать подписи осей на каждой панели — chartjunk; подписывайте по краю сетки.
Итог
- Small multiples заменяют «спагетти» сеткой маленьких панелей.
- Обязательна общая шкала осей для честного сравнения.
- Порядок панелей можно сделать носителем информации.
- Это перенос сравнения с цвета на позицию и форму.