boxplot() в R: как сделать BoxГрафики в RStudio
⚡ Умное резюме
BoxФункция `plot` в R суммирует числовое распределение с помощью медианы, квартилей, «усов» и выбросов, используя функцию `geom_boxplot()` из пакета `ggplot2`. В этом пошаговом руководстве строится ящичная диаграмма на основе набора данных о качестве воздуха с добавлением цвета, точек, дрожания, выемок и сравнений групп.

boxplot() в R
boxplot() в R помогает визуализировать распределение данных по квартилям и обнаружить наличие выбросов. Вы можете использовать геометрический объект geom_boxplot() из библиотеки ggplot2, чтобы нарисовать boxplot() в R.
Мы будем использовать набор данных о качестве воздуха, чтобы ввести функцию boxplot() в R с помощью библиотеки ggplot. Набор данных содержит ежедневные измерения качества воздуха в Нью-Йорке с мая по сентябрь 1973 года и включает 153 наблюдения. Мы будем использовать следующие переменные:
- Озон: числовая переменная
- Ветер: числовая переменная
- Месяц: с мая по сентябрь. Числовая переменная
Прежде чем рисовать, стоит точно знать, что обозначает каждая часть коробки.
Как читать Box График: квартили, межквартильный размах и выбросы.
Каждый элемент ящичной диаграммы кодирует одно число из пятичислового сводного списка. Знание того, какое число к чему относится, превращает диаграмму из декоративного элемента в инструмент анализа.
- Нижний шарнир: Первый квартиль, Q1. Двадцать пять процентов наблюдений находятся ниже него.
- Медианная линия: Второй квартиль. Его положение внутри прямоугольника указывает на асимметрию: линия, смещенная вниз, означает, что данные имеют правостороннюю асимметрию.
- Верхний шарнир: Третий квартиль, Q3. Семьдесят пять процентов наблюдений находятся ниже него.
- Box высота: Межквартильный размах (IQR = Q3 – Q1) охватывает среднюю половину данных и является стандартной надежной мерой разброса.
- Усы: Они простираются до самого крайнего значения, оставаясь в пределах 1.5 межквартильного размаха от ближайшей точки опоры. Они не являются минимумом и максимумом.
- Пункты, выходящие за рамки видимого: Наблюдения, помеченные как выбросы согласно правилу 1.5 IQR.
Два предостережения. Во-первых, «выброс» здесь — это статистический сигнал, а не ошибка: в асимметричном распределении, таком как концентрация озона, ожидаются высокие значения, и их не следует удалять. Во-вторых, диаграмма размаха скрывает форму распределения, поэтому две группы с одинаковыми прямоугольниками могут иметь совершенно разные исходные данные. Добавление смещенных точек, как показано ниже, предотвращает это.
Box График, гистограмма и скрипичный график в R
Все три диаграммы описывают числовое распределение, но каждая из них раскрывает то, что скрывает другая.
| Критерии | Box Участок | Гистограмма | Сюжет для скрипки |
|---|---|---|---|
| Шоу | Медиана, квартили, выбросы | Частота в каждом бине | Кривая полной плотности |
| Revнесколько вершин | Нет | Да | Да |
| Флаги, выходящие за рамки нормы | Да, в явном виде. | Только визуально | Не прямо |
| Сравнение множества групп | Прекрасно | Неловко | Хорошо |
| Требуется выбор варианта настройки. | Нет | Да, подсчет контейнеров. | Да, пропускная способность |
| объект ggplot2 | geom_boxplot() | geom_histogram() | geom_violin() |
Распространенным компромиссом является построение скрипичной диаграммы с узкой ящичной диаграммой внутри, что позволяет сохранить форму графика плотности и сводку по квартилям на одном графике. См. Учебное пособие по гистограммам что касается группировки данных.
Создавай Box Участок
Прежде чем вы начнете создавать свой первый boxplot() в R, вам необходимо манипулировать данными следующим образом:
- Шаг 1. Импортируйте данные
- Шаг 2. Удалите ненужные переменные
- Шаг 3: Преобразуйте месяц в упорядоченный фактор.
- Шаг 4: Создайте новую категориальную переменную, разделив каждый месяц на три части: начало, середина и конец.
- Шаг 5. Удалите недостающие наблюдения
Все эти шаги выполняются с помощью dplyr и оператора конвейера %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
Хорошей практикой является проверка структуры данных с помощью функции проблеск().
glimpse(data_air)
Выход:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
В файлах Ozone и Solar.R содержатся значения NA. Поскольку функция geom_boxplot() автоматически отбросит их и выведет предупреждение, удобнее удалить их явно.
# Step 5
data_air_nona <-data_air %>% na.omit()
Базовый сюжет
Теперь постройте график распределения озона по месяцам.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code объяснение
- Сохраните график для дальнейшего использования
- box_plot: базовый график хранится в объекте box_plot, что позволяет добавлять слои позже без повторного вызова функции.
- Добавьте геометрический объект
- Вы передаете набор данных data_air_nona в ggplot boxplot.
- Внутри аргумента aes() вы добавляете оси X и Y.
- Знак + означает, что вы хотите, чтобы R продолжал читать код. Это делает код более читабельным, если его взломать.
- Используйте geom_boxplot() для создания коробчатой диаграммы.
Выход:
Изменить сторону графика
Вы можете перевернуть сторону графика.
box_plot +
geom_boxplot()+
coord_flip()
Code объяснение
- box_plot: вы используете сохраненный график. Это позволяет избежать переписывания всех кодов каждый раз, когда вы добавляете новую информацию в график.
- geom_boxplot(): рисует прямоугольники и усы
- coord_flip(): перевернуть сторону графика.
Выход:
Изменить цвет выброса
Вы можете изменить цвет, форму и размер выбросов.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code объяснение
- outlier.colour="red": Управляет цветом выбросов.
- outlier.shape=2: изменить форму выброса. 2 относится к треугольнику
- outlier.size=3: Изменяет размер треугольника. Большие числа приводят к появлению более крупных маркеров.
Выход:
Добавить сводную статистику
На диаграмму размаха можно наложить сводную статистику, например, среднее значение по группе, чего сама диаграмма не показывает.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code объяснение
- Функция stat_summary() добавляет вычисленную статистику поверх диаграммы размаха.
- Аргумент fun определяет, какая статистика будет возвращена. В данном случае это среднее значение. Обратите внимание, что в более старом коде используется fun.y, который ggplot2 объявил устаревшим в версии 3.3.0.
- Примечание. Доступны и другие статистические данные, такие как минимум и максимум. На одном графике может отображаться более одной статистики.
- geom = «точка»: постройте среднее значение с точкой.
- size=3: Размер точки
- color =”steelblue”: Цвет точек.
Выход:
Box График с точками
Далее добавьте слой точечной диаграммы поверх прямоугольников. Каждая точка представляет собой отдельное наблюдение, что позволяет увидеть размер выборки за каждым прямоугольником.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code объяснение
- Функция geom_dotplot() рисует одну точку для каждого наблюдения, располагая их друг над другом внутри каждого интервала.
- binaxis='y': Измените положение точек вдоль оси Y. По умолчанию ось X
- dotsize=1: Размер точек.
- stackdir='center': Способ расположения точек: Четыре значения:
- «вверх» (по умолчанию),
- "вниз"
- "центр"
- «центральное целое»
Выход:
Контролируйте эстетику Box Участок
Изменить цвет коробки
Вы можете изменить цвета группы.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code объяснение
- Цвета групп управляются в карте aes().pingВы можете использовать параметр color=Month, чтобы изменить цвет диаграммы «ящик с усами» в зависимости от месяца.
Выход:
Box сюжет с несколькими группами
Также возможно добавить несколько групп. Вы можете визуализировать разницу в качестве воздуха в зависимости от дня измерения.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code объяснение
- Карта aes()ping Управление геометрическим объектом определяет группы для отображения (эта переменная должна быть фактором).
- aes(fill= day_cat) позволяет создать три поля для каждого месяца по оси X.
Выход:
Box График с дрожащими точками
Еще один способ отображения отдельных наблюдений — использование смещенных точек. Смещение точек обычно выбирают, когда категориальная ось X приводит к тому, что многие точки оказываются в одной и той же позиции.
Этот метод позволяет избежать наложения.ping дискретных данных.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code объяснение
- Функция geom_jitter() добавляет небольшое случайное смещение к каждой точке, чтобы обеспечить перекрытие.ping Значения становятся видимыми.
- shape=15 изменяет форму точек. 15 представляет квадраты
- color = «steelblue»: изменить цвет точки.
- position = position_jitter(width = 0.21): управляет смещением точек вбок, измеряемым в единицах оси X. По умолчанию — 40 процентов от расстояния между категориями.
Выход:
Вы можете увидеть разницу между первым графиком с методом джиттера и вторым с точечным методом.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
зазубренный Box Участок
Интересной особенностью geom_boxplot() является функция коробчатой диаграммы с надрезом в R. График с надрезом сужает рамку вокруг медианы. Основная цель диаграммы с надрезом — сравнить значимость медианы между группами. Имеются убедительные доказательства того, что две группы имеют разные медианы, когда отметки не перекрываются. Вырез рассчитывается следующим образом:
Здесь IQR — межквартильный размах, а n — количество наблюдений в группе. Эта точка примерно соответствует 95-процентному доверительному интервалу медианы.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code объяснение
- geom_boxplot(notch = TRUE): построить диаграмму размаха с метками вокруг медианы
Выход:
Как добавить заголовки, метки и пользовательские цвета к Box Построение графиков в R
Приведенные выше графики используют настройки ggplot2 по умолчанию, которые берут имена переменных непосредственно из фрейма данных. Для публикации графика необходимы читаемые подписи и продуманная цветовая палитра.
Заголовки и подписи осей. Один вызов функции labs() устанавливает каждый текстовый элемент:
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
Выбор собственных цветов. Используйте scale_fill_manual(), когда заливка отображается внутри функции aes(), и scale_colour_manual(), когда цвет:
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
Легенда здесь отключена, потому что на оси X уже указаны названия месяцев, поэтому её повторение заняло бы лишнее место.
Переупорядочиваю коробки. Уровни фактора определяют порядок на оси. Поскольку фактор «Месяц» был создан как упорядоченный фактор, он уже отображается в хронологическом порядке. Для неупорядоченного фактора отсортируйте по медиане:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Сохранение диаграммы. Функция ggsave() записывает последний график на диск с разрешением, которое вы контролируете:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Построение графиков в R: Code Референции
В таблице ниже приведен список вызовов ggplot2 для каждого варианта диаграммы размаха, рассмотренного выше:
| Цель | Code |
|---|---|
| Базовый сюжет |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Изменить ориентацию |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Сюжет с надрезом |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box сюжет с трясущимися точками |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Раскраска по группам |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Несколько групп в каждой категории |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Сложите среднее значение по группе. |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Также проверьте: - Учебное пособие по R для начинающих: изучение языка программирования R











