Учебники

23) Boxplot в R

Вы можете использовать геометрический объект geom_boxplot () из библиотеки ggplot2, чтобы нарисовать коробочный график. Квадратный график помогает визуализировать распределение данных по квартилям и определять наличие выбросов.

Мы будем использовать набор данных airquality, чтобы представить коробочный график с ggplot. Этот набор данных измеряет качество воздуха в Нью-Йорке с мая по сентябрь 1973 года. Набор данных содержит 154 наблюдения. Мы будем использовать следующие переменные:

  • Озон: числовая переменная
  • Ветер: числовая переменная
  • Месяц: с мая по сентябрь. Числовая переменная

В этом уроке вы узнаете

Создать Box Box

Прежде чем вы начнете создавать свой первый блок-график, вам нужно обработать данные следующим образом:

  • Шаг 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 ().

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...

В наборе данных есть NA. Удалить их разумно.

# 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()

Код Объяснение

  • Сохраните график для дальнейшего использования
    • box_plot: вы сохраняете график в переменной box_plot. Это полезно для дальнейшего использования или позволяет избежать слишком сложной строки кодов.
  • Добавьте график геометрического объекта
    • Вы передаете набор данных data_air_nona в ggplot.
    • Внутри аргумента aes () вы добавляете оси X и Y.
    • Знак + означает, что вы хотите, чтобы R продолжал читать код. Это делает код более читабельным, разбивая его.
    • Используйте geom_boxplot () для создания блочного графика

Вывод:

Изменить сторону графика

Вы можете перевернуть сторону графика.

box_plot +
  geom_boxplot()+
  coord_flip()

Код Объяснение

  • box_plot: вы используете график, который вы сохранили. Это позволяет избежать переписывания всех кодов каждый раз, когда вы добавляете новую информацию в график.
  • geom_boxplot (): создать коробочный график
  • ordin_flip (): перевернуть сторону графика

Вывод:

Изменить цвет выброса

Вы можете изменить цвет, форму и размер выбросов.

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

Код Объяснение

  • 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()

Код Объяснение

  • stat_summary () позволяет добавить сводку к блок-графику
  • Аргумент fun.y контролирует возвращаемую статистику. Вы будете использовать среднее
  • Примечание. Доступна и другая статистика, например, минимальная и максимальная. На одном графике может быть представлено более одной статистики
  • geom = «point»: постройте среднее значение с точкой
  • размер = 3: размер точки
  • color = «steelblue»: цвет точек

Вывод:

Коробка с точками

На следующем графике вы добавляете слои точечного графика. Каждая точка представляет наблюдение.

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

Код Объяснение

  • geom_dotplot () позволяет добавить точку к ширине бина
  • binaxis = ‘y’: изменить положение точек вдоль оси y. По умолчанию ось X
  • dotsize = 1: размер точек
  • stackdir = ‘center’: способ сложить точки: четыре значения:
    • «вверх» (по умолчанию),
    • «вниз»
    • «центр»
    • «Centerwhole»

Вывод:

Контроль эстетики сюжета коробки

Изменить цвет коробки

Вы можете изменить цвета группы.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Код Объяснение

  • Цвета групп контролируются в отображении aes (). Вы можете использовать цвет = месяц, чтобы изменить цвет коробки в соответствии с месяцами

Вывод:

Сюжет с несколькими группами

Также возможно добавить несколько групп. Вы можете визуализировать разницу в качестве воздуха в зависимости от дня проведения мероприятия.

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

Код Объяснение

  • Отображение aes () геометрического объекта управляет отображаемыми группами (эта переменная должна быть фактором)
  • aes (fill = day_cat) позволяет создавать три поля для каждого месяца по оси X

Вывод:

Участок с разбитыми точками

Еще один способ показать точку с помощью дрожащих точек. Это удобный способ визуализации точек с категориальной переменной.

Этот метод позволяет избежать наложения дискретных данных.

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

Код Объяснение

  • geom_jitter () добавляет небольшое затухание к каждой точке.
  • shape = 15 меняет форму точек. 15 представляет квадраты
  • color = «steelblue»: изменить цвет точки
  • position = position_jitter (width = 0.21): способ размещения точек перекрытия. position_jitter (width = 0.21) означает, что вы перемещаете точки на 20 процентов от оси x. По умолчанию 40 процентов.

Вывод:

Вы можете увидеть разницу между первым графиком с помощью метода джиттера и вторым с помощью метода точек.

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Участок с надрезом

Интересной особенностью geom_boxplot () является участок с надрезами. Зубчатый участок сужает прямоугольник вокруг медианы. Основное назначение участка с надрезом — сравнить значение медианы между группами. Существуют убедительные доказательства того, что две группы имеют разные медианы, когда выемки не перекрываются. Зазор рассчитывается следующим образом:

с — межквартильный и число наблюдений.

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Код Объяснение

  • geom_boxplot (notch = TRUE): создать участок с надрезами

Вывод:

Резюме

Мы можем суммировать различные типы коробочных графиков в таблице ниже:

Задача

Код

Основной сюжет

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)

Сюжет с разбитыми точками

ggplot(df, aes( x = x1, y =y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))