Вопрос или проблема
Я хотел бы создать коробчатую диаграмму для моих данных, где сама диаграмма представляет IQR, а усики представляют значения от 5-го до 95-го процентов. Я хочу использовать geom_dotplot, чтобы показать только отдельные данные, которые находятся выше или ниже усиков (т.е. ниже 5-го процента или выше 95-го процента). Есть ли способ сделать это с использованием ggplot в R?
Я не хочу, чтобы точки, находящиеся в коробчатой диаграмме, были видимы, только те, которые выше или ниже усиков.
Вы можете установить значения усиков и оснований на любые, которые вам нравятся, используя stat = "identity"
внутри geom_boxplot
. Просто используйте quantile
, чтобы заранее вычислить нужные значения. Отфильтруйте набор данных, чтобы создать второй маленький фрейм данных для точек.
Вы не предоставили воспроизводимый пример, поэтому я предполагаю, что ваш фрейм данных имеет столбцы с именами “x” и “y”. Вот воспроизводимый набор данных для демонстрации:
set.seed(1)
df <- data.frame(x = c("A", "B"), y = rnorm(100, 4.5, 2))
Теперь мы можем сделать:
library(tidyverse)
box <- df %>%
group_by(x) %>%
summarise(mn = quantile(y, 0.05),
low = quantile(y, 0.25),
mid = median(y),
up = quantile(y, 0.75),
mx = quantile(y, 0.95))
points <- df %>%
group_by(x) %>%
mutate(lo = quantile(y, 0.05), hi = quantile(y, 0.95)) %>%
filter(y < lo | y > hi)
ggplot(box, aes(x, fill = x)) +
geom_boxplot(aes(ymin = mn, lower = low, middle = mid, upper = up, ymax = mx),
stat = "identity", width = 0.5) +
geom_point(aes(y = y), data = points) +
scale_fill_manual(values = c("gray90", "gray75"), guide = "none") +
theme_classic(20)
Ответ или решение
Вопрос, который вы задали, касается создания графика в R с использованием ggplot2, именно ящика с усами (boxplot), где точки, представляющие индивидуальные данные, отображаются только в случае, если они находятся выше или ниже определенного диапазона, установленного усами. Давайте шаг за шагом рассмотрим, как это можно сделать.
Шаг 1: Подготовка данных
Для начала давайте создадим пример набора данных. В данном случае мы создадим фрейм данных с двумя столбцами: x
(группы) и y
(значения).
set.seed(1)
df <- data.frame(x = c("A", "B"), y = rnorm(100, 4.5, 2))
Шаг 2: Вычисление квартилей и создание отдельного фрейма для точек
Сначала необходимо определить значения, которые вам нужны для боксплота. Для этого мы будем вычислять 5%, 25%, 50%, 75%, и 95% квартиль. Мы также создадим отдельный датасет для точек, которые находятся вне установленных усов (т.е. ниже 5% и выше 95%).
library(dplyr)
# Подсчет квартилей
box <- df %>%
group_by(x) %>%
summarise(
mn = quantile(y, 0.05),
low = quantile(y, 0.25),
mid = median(y),
up = quantile(y, 0.75),
mx = quantile(y, 0.95)
)
# Фильтрация точек, находящихся вне усов
points <- df %>%
group_by(x) %>%
mutate(lo = quantile(y, 0.05), hi = quantile(y, 0.95)) %>%
filter(y < lo | y > hi)
Шаг 3: Визуализация с помощью ggplot2
Теперь, когда у нас есть подготовленные данные, мы можем использовать ggplot2 для создания боксплота и визуализации точек, которые находятся за пределами усов.
library(ggplot2)
ggplot(box, aes(x, fill = x)) +
geom_boxplot(aes(ymin = mn, lower = low, middle = mid, upper = up, ymax = mx),
stat = "identity", width = 0.5) +
geom_point(data = points, aes(y = y), color = "red") + # Отображаем точки вне усов
scale_fill_manual(values = c("gray90", "gray75"), guide = "none") +
theme_classic(base_size = 20)
Объяснение кода:
- geom_boxplot(): Этот слой создает сам боксплот, используя заранее рассчитанные значения квартилей и персентилей.
- geom_point(): Этот слой добавляет точки из созданного фрейма
points
, который содержит только те значения, которые находятся вне установленных границ. - scale_fill_manual(): Устанавливаем цвета для боксплота, чтобы сделать его визуально привлекательным.
- theme_classic(): Использование классической темы для улучшения визуальной четкости графика.
Заключение
В результате вы получите боксплот, который адекватно отображает распределение ваших данных, и только точки за пределами усов будут видны, что позволит вам лучше увидеть выбросы. Это метод эффективен для анализа данных и визуализации полезной информации, позволяя сосредоточиться на экстренных значениях. Обратите внимание на использование dplyr и ggplot2, которые являются мощными инструментами для работы с данными в R.