Графики с ggplot2

Знакомимся с ggplot2 — самым мощным инструментом визуализации в R, построенным на «грамматике графики».

ggplot2 — пакет для построения графиков по принципу грамматики: график собирается из слоёв (данные + геометрия + эстетика).

В ggplot2 любой график строится из трёх частей: данные (что рисуем), эстетики (aes — какие колонки на оси X, Y, цвет) и геометрия (geom_ — точки, столбцы, линии). Слои соединяются знаком +.

Идея «грамматики графики» в том, что вы не выбираете готовый тип диаграммы из меню, а собираете график из независимых блоков. Это даёт огромную гибкость: захотели раскрасить по группе — добавили одну эстетику; нужны подписи — добавили слой; нужна вторая геометрия поверх первой — добавили ещё geom_. Тот же набор правил описывает и точечную диаграмму, и столбцы, и сложный многослойный график — меняются лишь кирпичики. Освоив эту логику один раз, вы сможете построить практически любую визуализацию, а не заучивать десятки отдельных «рецептов».

Точечная диаграмма: geom_point

Связь двух числовых переменных показывают точками:

library(ggplot2)
ggplot(people, aes(x = age, y = income)) +
  geom_point()

Читается так: «возьми данные people, по оси X — age, по оси Y — income, нарисуй точками». Каждая строка таблицы становится точкой.

Столбчатая диаграмма: geom_bar и geom_col

Для сравнения категорий используют столбцы:

ggplot(people, aes(x = city)) +
  geom_bar()

ggplot(sales, aes(x = month, y = revenue)) +
  geom_col()

Разница важная: geom_bar сам считает количество строк в каждой категории (высота = частота), а geom_col берёт готовые значения из колонки Y.

Линейный график: geom_line

Для динамики во времени берут линию:

ggplot(sales, aes(x = month, y = revenue)) +
  geom_line() +
  labs(title = "Выручка по месяцам", x = "Месяц", y = "Выручка")

Функция labs добавляет заголовок и подписи осей — отдельным слоем, как и всё в ggplot2.

Цвет как эстетика

Колонку можно «отобразить» в цвет — тогда группы раскрасятся автоматически:

ggplot(people, aes(x = age, y = income, color = city)) +
  geom_point()

Каждый город получит свой цвет, и ggplot2 сам построит легенду.

Как работает под капотом

Ключевая идея — отображение (mapping) внутри aes: вы связываете колонку данных с визуальным свойством (позицией, цветом, размером). Это отличается от простого «задать цвет». Сравните: aes(color = city) раскрашивает точки по значению колонки city и строит легенду, а geom_point(color = "blue") вне aes просто красит все точки в синий. Понимание этой разницы — половина успеха в ggplot2.

Частые ошибки

  • Ставить + в начале строки. При переносе плюс должен быть в конце предыдущей строки, иначе R решит, что выражение закончилось.
  • Путать geom_bar и geom_col. Первый считает частоты, второй рисует готовые значения Y.
  • Класть постоянный цвет внутрь aes. aes(color = "red") создаст легенду с одной категорией «red», а не покрасит в красный. Постоянный цвет — вне aes.

Итог

  • График ggplot2 = данные + aes (отображения) + geom_ (геометрия), слои через +.
  • geom_point — точки, geom_bar/geom_col — столбцы, geom_line — линия.
  • В aes колонки отображаются в позицию, цвет, размер.
  • Постоянный цвет задают вне aes, внутри — только колонки.
Проверьте себя
1. Из каких частей собирается график в ggplot2?
AТолько из данных
BДанные + aes (эстетики) + geom (геометрия)
CТолько из geom-функций
DИз CSV-файла и заголовка
2. Чем geom_bar отличается от geom_col?
AНичем
Bgeom_bar считает частоты категорий, geom_col рисует готовые значения Y
Cgeom_col считает частоты, geom_bar — нет
Dgeom_bar только для линий
3. Что сделает aes(color = city)?
AПокрасит все точки в один цвет city
BРаскрасит точки по значениям колонки city и построит легенду
CВызовет ошибку
DУдалит колонку city