boxplot() в R: Как да направя BoxГрафики в RStudio
⚡ Умно обобщение
BoxГрафиката в R обобщава числово разпределение чрез медианата, квартилите, нишките и отклоненията, използвайки geom_boxplot() от ggplot2. Това ръководство изгражда диаграма тип „кутия“ върху набора от данни за качеството на въздуха и наслагва цветове, точки, трептене, прорези и групови сравнения.

boxplot() в R
boxplot() в R помага да се визуализира разпределението на данните по квартил и да се открие наличието на извънредни стойности. Можете да използвате геометричния обект geom_boxplot() от библиотеката ggplot2, за да начертаете boxplot() в R.
Ще използваме набора от данни за качеството на въздуха, за да въведем boxplot() в R с ggplot. Наборът от данни записва ежедневни измервания на качеството на въздуха в Ню Йорк от май до септември 1973 г. и съдържа 153 наблюдения. Ще използваме следните променливи:
- Озон: Числова променлива
- Вятър: Числова променлива
- Месец: май до септември. Числова променлива
Преди да нарисувате такава, е добре да знаете точно какво представлява всяка част от кутията.
Как да четем a Box Графика: Квартили, IQR и отклонения
Всеки елемент от боксова диаграма кодира едно число от обобщението от пет числа. Знанието кое кое е кое превръща диаграмата от декорация в анализ.
- Долна панта: първият квартил, 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().
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() е функцията 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











