Сделайте визуализацию данных, которую запомнят люди. Единственное руководство для R, которое вам понадобится.
Язык визуализации данных универсален. Не все узнают отличную визуализацию, но все запомнят ужасную. Если вы используете инструменты и методы, описанные в этой статье, шансы, что ваша визуализация будет классифицирована как «ужасная», будут близки к нулю.
В этой статье показано, как создавать всевозможные гистограммы с R и ggplot2
. Вы также узнаете, как сделать их эстетически приятными с помощью цветов, тем, заголовков и этикеток.
Сегодня вы научитесь:
- Сделайте свою первую гистограмму
- Изменить цвета и темы
- Добавьте заголовки, субтитры и подписи
- Редактировать метки осей
- Создавайте составные, сгруппированные и горизонтальные гистограммы
- Добавить ярлыки
Сделайте свою первую гистограмму
В R есть множество наборов данных, и тысячи других доступны в Интернете. Тем не менее, вы заявите о своем собственном. Причина проста - вы здесь, чтобы научиться создавать гистограммы, а не как агрегировать данные.
Вот набор данных, который вы будете использовать сегодня:
library(ggplot2)
data <- data.frame(
quarter=c("Q1", "Q1", "Q2", "Q2", "Q3", "Q3", "Q4", "Q4"),
product=c("A", "B", "A", "B", "A", "B", "A", "B"),
profit=c(10, 14, 12, 11, 13, 15, 16, 18)
)
Стандартная библиотека R для визуализации данных - ggplot2
. В его основе лежит принцип наслоения. Например, вы сначала объявляете уровень данных, а затем слой визуализации.
Эти два обязательны для любой визуализации. Позже вы увидите, как дополнительные слои могут сделать диаграммы более информативными и привлекательными.
Для начала вы создадите гистограмму со столбцом quarter
на оси x и profit
на оси y. Это объявлено в первом слое (данные), а второй уровень (визуализация) определяет, какой тип визуализации вам нужен.
Слои geom_bar
и geom_col
используются для создания гистограмм. Для первого варианта вам нужно указать stat = "identity"
, чтобы он работал, поэтому лестница используется на протяжении всей статьи.
Вы можете создать простую гистограмму с помощью этого кода:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col()
Вот соответствующая визуализация:
Этот выполняет свою работу, но не похоже на то, что вы хотели бы показывать своему боссу. Вы исправите это в следующих разделах.
Цвета и темы
Настройка цветов и тем - это самое простое, что вы можете сделать, чтобы визуализация выглядела лучше. geom_bar()
имеет два полезных параметра:
color
- цвет контура полосfill
- цвет заливки полос
Вот как с помощью fill
сделать диаграмму синей:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9")
Параметр color
изменяет только контур. Набор данных, который вы используете, состоит из двух разных продуктов. R рисует линию заполнения между значениями продуктов, поскольку по умолчанию используются гистограммы с накоплением. Вы узнаете больше о диаграммах с накоплением позже.
Вот что это означает на практике. В приведенном ниже фрагменте кода устанавливается белый цвет заливки и синий цвет контура:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(color = "#0099f9", fill = "#ffffff")
Если раскраска не помогает, вы можете полностью изменить тему. Это еще один слой, который нужно добавить после начального слоя визуализации. Вот как это сделать:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
theme_classic()
Если эта тема не для вас, есть из чего выбрать. Вы можете найти весь список здесь.
Заголовки, субтитры и подписи
Визуализация без названия бесполезна. Невозможно узнать, смотрите ли вы на голоса на выборах или на голоса на выборах в США 2020 года в Калифорнии. Вы можете использовать субтитры для добавления дополнительной информации, но это не обязательно. Подписи полезны для размещения кредитов визуализации и источников.
Самый удобный способ добавить их - через слой labs()
. Принимает значения для title
, subtitle
и caption
.
Давайте посмотрим, как сложить все три:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
labs(
title = "Quarterly Profit (in million U.S. dollars)",
subtitle = "A simple bar chart",
caption = "Source: ImaginaryCo"
)
Это хорошее начало, но что, если вы хотите добавить стили? Давайте посмотрим, как раскрасить заголовок, выделить подзаголовок жирным шрифтом и выделить заголовок курсивом:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
labs(
title = "Quarterly Profit (in million U.S. dollars)",
subtitle = "A simple bar chart",
caption = "Source: ImaginaryCo"
) +
theme(
plot.title = element_text(color = "#0099f9", size = 20),
plot.subtitle = element_text(face = "bold"),
plot.caption = element_text(face = "italic")
)
Давайте сделаем еще один шаг вперед. Вот как выровнять заголовок по центру, подзаголовок - справа, а заголовок - слева:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
labs(
title = "Quarterly Profit (in million U.S. dollars)",
subtitle = "A simple bar chart",
caption = "Source: ImaginaryCo"
) +
theme(
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 1),
plot.caption = element_text(hjust = 0)
)
Вы узнали, как добавить красиво оформленный заголовок, но метки оси по умолчанию по-прежнему сдерживают вашу визуализацию. Далее вы узнаете, как их изменить.
Ярлыки осей
Короче - работает идентично, как с заголовками, так и с субтитрами. Слой labs()
принимает значения для меток оси X и Y.
Вот как изменить текст:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
labs(
x = "Quarter of 2020",
y = "Profit in 2020"
)
Вы можете изменить стили так же, как и с заголовками, субтитрами и подписями. Следующий фрагмент кода сделает вашу метку оси X синим и жирным шрифтом, а метку оси Y - курсивом:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
labs(
x = "Quarter of 2020",
y = "Profit in 2020"
) +
theme(
axis.title.x = element_text(color = "#0099f9", size = 15, face = "bold"),
axis.title.y = element_text(size = 15, face = "italic")
)
И это касается изменения основных визуальных эффектов. Далее вы узнаете, как работать с различными гистограммами - составными, сгруппированными и горизонтальными.
Сложенные, сгруппированные и горизонтальные гистограммы
Пакет ggplot2
по умолчанию использует гистограммы с накоплением. Столбчатые диаграммы с накоплением лучше всего использовать, когда все части окрашены по-разному.
Чтобы изменить окраску, вам нужно только изменить значение fill
на уровне данных. Вот пример:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col()
Между продуктами заметно различие, и теперь вы можете видеть, какую прибыль приносил каждый продукт в квартал.
Изменить цвет каждой порции можно двумя способами:
- Вручную - указав вектор названий цветов или шестнадцатеричных кодов цветов.
- С палитрами - с помощью встроенных цветовых палитр.
Давайте сначала рассмотрим ручной подход. Вам нужно добавить слой с scale_fill_manual
:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col() +
scale_fill_manual(values = c("#69c6ff", "#0099f9"))
Палитры немного проще, потому что вам не нужно знать точные значения цвета. По той же причине это также можно рассматривать как ограничение. Вот список встроенных палитр. Слой scale_fill_brewer
используется для работы с палитрами:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col() +
scale_fill_brewer(palette = "Set1")
Теперь на сгруппированные гистограммы. Они отображают полосы, соответствующие группе, рядом друг с другом, а не поверх друг друга. Чтобы использовать сгруппированные гистограммы, вам нужно поместить position = position_dodge()
в слой geom_bar
:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col(position = position_dodge())
Вы можете изменить окраску так же, как и для гистограмм с накоплением - через слои scale_fill_manual
или scale_fill_brewer
. Вот пример:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col(position = position_dodge()) +
scale_fill_manual(values = c("#3db5ff", "#0099f9"))
Наконец, давайте рассмотрим горизонтальные гистограммы. Они полезны, когда на оси абсцисс много категорий или когда их имена длинные. coord_flip()
используется для превращения любой вертикальной гистограммы в горизонтальную:
ggplot(data, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
coord_flip()
Вы можете использовать слои scale_fill_manual
или scale_fill_brewer
, чтобы изменить цвет. Вот пример:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col(position = position_dodge()) +
scale_fill_manual(values = c("#3db5ff", "#0099f9")) +
coord_flip()
Теперь вы знаете, как создавать гистограммы любого типа, но есть еще одну вещь, которую можно улучшить. Посмотрим, что это такое в следующем разделе.
Этикетки
На гистограммы бывает трудно смотреть. Часто требуется знать точное значение. Если ось Y находится в масштабе миллионов, считывание значений из диаграммы становится приближением (в лучшем случае). Вот тут-то и нужны лейблы.
Вы можете поместить текст где-нибудь в верхней части каждой панели, чтобы показать точное значение. Это решает проблему чтения значений с диаграммы. Это также делает его более удобным для пользователя, поскольку вам не нужно постоянно переводить взгляд на ось Y.
Вы узнаете, как размещать ярлыки поверх полос. В первом примере вам нужно отфильтровать набор данных, чтобы отображался только продукт A. Причина проста - ggplot2
по умолчанию использует гистограммы с накоплением, и в каждом квартале в стеке есть два продукта.
Позже вы узнаете, как добавлять ярлыки для нескольких стопок, но давайте начнем с основ.
Вот код:
library(dplyr)
data_a <- data %>%
filter(product == "A")
ggplot(data_a, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
geom_text(aes(label = profit), vjust = -0.5, size = 5)
Но что, если вы хотите поместить ярлыки внутрь? Просто немного поиграйте с vjust
. Установка его на 2 дает трюк:
ggplot(data_a, aes(x = quarter, y = profit)) +
geom_col(fill = "#0099f9") +
geom_text(aes(label = profit), vjust = 2, size = 5, color = "#ffffff")
Все становится немного сложнее, если вам нужны этикетки для нескольких стопок. Вы должны указать position = position_stack()
внутри слоя geom_text
. Установка vjust
на 0,5 делает их центрированными:
ggplot(data, aes(x = quarter, y = profit, fill = product, label = profit)) +
geom_col() +
scale_fill_manual(values = c("#3db5ff", "#0099f9")) +
geom_text(position = position_stack(vjust = 0.5), size = 4, color = "#ffffff")
Есть альтернатива для сгруппированной гистограммы. Вам нужно будет указать position = position_dodge()
, чтобы он работал. Этот код центрирует метки внутри каждой группы:
ggplot(data, aes(x = quarter, y = profit, fill = product)) +
geom_col(position = position_dodge()) +
scale_fill_manual(values = c("#3db5ff", "#0099f9")) +
geom_text(aes(label = profit), position = position_dodge(0.9), vjust = 2, size = 4, color = "#ffffff")
И это все, что касается ярлыков и гистограмм. Давайте подведем итоги.
Вывод
Сегодня вы узнали, как создать гистограмму любого типа в R и как настроить ее с помощью цветов, заголовков, субтитров и меток. Теперь вы можете использовать гистограммы для базовой визуализации, отчетов и панелей мониторинга.
Вы новичок в R? Ознакомьтесь с этим подробным руководством по R для программистов.
Первоначально опубликовано на https://appsilon.com 7 декабря 2020 г.