boxplot() в R: как сделать BoxГрафики в RStudio

⚡ Умное резюме

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

  • 📐 Пятичисловая сводка: Прямоугольник охватывает диапазон от первого до третьего квартиля, линия обозначает медиану, а «усы» достигают 1.5-кратного межквартильного размаха.
  • 🧱 Базовый синтаксис: Функция `ggplot(df, aes(x = group, y = value))` + `geom_boxplot()` создает один прямоугольник для каждого уровня группы.ping фактор.
  • 🔴 Необычный стиль: Параметры outlier.colour, outlier.shape и outlier.size определяют, как отображаются точки за пределами «усов» (области, обозначающей границы выбросов).
  • 💠 Отображение наблюдений: Функция geom_jitter() смещает перекрытиеping указатель расположен вбок, показывая размер выборки, скрывающийся за каждым прямоугольником.
  • 📉 зазубренный Boxэто: Параметр notch = TRUE отображает доверительный интервал медианы и отсутствие перекрытий.ping Надрезы указывают на реальную разницу.
  • 🎨 Grouping: Картаping Функция `fill inside geom_boxplot()` разделяет каждую категорию на несколько расположенных рядом прямоугольников.

Boxпостроение графиков в R

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 Участок

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

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

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 График с точками

Контролируйте эстетику Box Участок

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

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

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

Code объяснение

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

Выход:

Измените цвет Box

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 График с несколькими группами

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 График с дрожащими точками

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

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

Box График с дрожащими точками

зазубренный Box Участок

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

зазубренный Box Участок

Здесь IQR — межквартильный размах, а n — количество наблюдений в группе. Эта точка примерно соответствует 95-процентному доверительному интервалу медианы.

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

Code объяснение

  • geom_boxplot(notch = TRUE): построить диаграмму размаха с метками вокруг медианы

Выход:

зазубренный Box Участок

Как добавить заголовки, метки и пользовательские цвета к 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

Часто задаваемые вопросы (FAQ)

Усы графика показывают наиболее экстремальное значение, находящееся в пределах 1.5-кратного межквартильного размаха ближайшего квартиля. Они не являются минимумом и максимумом, и все, что находится за их пределами, обозначается как выброс.

Не автоматически. Правило 1.5 IQR — это условность, а не доказательство ошибки. Сначала проверьте каждую точку: искаженные данные, такие как показания озона, естественно, дают завышенные значения, которые являются подлинными измерениями.

Перекрытиеping Наличие меток указывает на отсутствие убедительных доказательств различий между двумя медианами. Отсутствие перекрытия.ping Штриховые метки указывают на вероятную реальную разницу, примерно эквивалентную сравнению с 95-процентной степенью достоверности.

Box Построение графиков — это стандартный этап предварительного исследования перед обучением: они выявляют асимметрию, выбросы и различия в масштабах признаков между классами. Команды также используют их для сравнения точности модели в разных группах перекрестной проверки.

Да. Искусственный интеллект может объяснять ошибки, например, когда непрерывная ось X отображает один прямоугольник, и предлагать правильную карту aes().pingи помечайте устаревшие аргументы, такие как fun.y. Всегда повторно запускайте исправленный код на своих данных.

Подведем итог этой публикации следующим образом: