Стълбовидна диаграма и хистограма в R с пример
⚡ Умно обобщение
Стълбовидната диаграма и хистограмата в R се изграждат с ggplot2, като се използва geom_bar() за категорични преброявания и geom_histogram() за непрекъснати разпределения. Това ръководство персонализира цвета, групата...ping, подреждане, ориентация, групиране и етикети в лентата върху набора от данни mtcars.

Какво е стълбовидна диаграма в R?
Стълбовидната диаграма е чудесен начин за показване на категорични променливи по оста x. Този тип графика обозначава два аспекта на оста y.
- Първият отчита броя на събитията във всяка група.
- Вторият показва обобщена статистика (минимум, максимум, средна стойност и т.н.) на променлива по оста y.
Ще използвате набора от данни mtcars, който има следните променливи:
- cyl: Номер на цилиндъра в колата. Числова променлива
- am: Тип предаване. 0 за автоматичен и 1 за ръчен. Числова променлива
- mpg: Мили на галон. Числова променлива
Тъй като хистограмата изглежда толкова сходна, си струва да се установи разликата, преди да се напише какъвто и да е код.
Стълбовидна диаграма срещу хистограма в R: Ключови разлики
Двете диаграми си приличат и постоянно се бъркат. Те отговарят на различни въпроси и използват различни геометрични обекти.
| Критерии | Бар диаграма | Хистограма |
|---|---|---|
| Променлива по оста X | Категоричен или факторен | Непрекъснато и числово |
| Какво представлява една лента | Една категория | Един интервал или бина от стойности |
| Пролуки между прътите | Да, категориите са отделни | Не, кофите са съседни. |
| Поръчка на бара | Може да се пренарежда свободно | Фиксирано от числовата скала |
| Отговор на въпроса | Как се сравняват групите? | Как е разпределена една променлива? |
| обект ggplot2 | geom_bar() | geom_histogram() |
Емпирично правило: ако пренареждането на стълбчетата все още има смисъл, имате стълбовидна диаграма. Ако пренареждането им би разрушило смисъла, имате хистограма. За обобщения, базирани на квартили, на една и съща непрекъсната променлива използвайте кутия парцел.
Как да създадете стълбовидна диаграма в R
За да създадете графика в R, можете да използвате библиотеката ggplot, която създава готови за публикуване графики. Основният синтаксис на тази библиотека е:
ggplot(data, mapping = aes()) + geometric object arguments: data: dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common objects are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Този урок се фокусира върху геометричния обект geom_bar(), който чертае стълбовидна диаграма, и върху geom_histogram() за непрекъснати данни.
Стълбовидна диаграма: брой
Първата ви графика показва честотата на цилиндъра с geom_bar(). Кодът по-долу е най-основният синтаксис.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Обяснение
- Предавате набора от данни mtcars на ggplot.
- Вътре в аргумента aes() задавате оста x на факторната променлива cyl
- Знакът + означава, че искате R да продължи да чете кода. Той прави кода по-четлив, като го разбива.
- Използвайте geom_bar() за геометричния обект.
Изход:
Забележка: уверете се, че конвертирате променливите във фактор, в противен случай R третира променливите като числови. Вижте примера по-долу.
Персонализирайте графиката
Четири аргумента могат да бъдат предадени за персонализиране на графиката:
- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar
Променете цвета на лентите
Можете да промените цвета на лентите. Обърнете внимание, че всички цветове на лентите са подобни.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Обяснение
- Цветовете на лентите се контролират от картата aes()ping вътре в геометричния обект (т.е. не в ggplot()). Можете да промените цвета с аргументите за запълване. Тук избирате цвета на корала.
Изход:
Можете да използвате този код:
grDevices::colors()
за да видите всички налични цветове в R. Има около 650 цвята.
Променете интензивността
Можете да увеличите или намалите интензитета на цвета на лентите
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Обяснение
- За да увеличите/намалите интензитета на лентата, можете да промените стойността на алфата. Голямата алфа увеличава интензитета, а ниската алфа я намалява. Алфата варира от 0 до 1. При 1 цветът съвпада точно с палитрата; при 0 лентата е невидима. Тук избирате алфа = 0.5.
Изход:
Оцветете по групи
Можете да промените цветовете на лентите, което означава един различен цвят за всяка група. Например променливата cyl има три нива, след което можете да начертаете лентовата диаграма с три цвята.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Обяснение
- Аргументът fill във функцията aes() променя цвета на лентата. Променяте цвета, като зададете fill = x-axis variable. Във вашия пример, x-axis variable е cyl; fill = factor(cyl)
Изход:
Добавете група в лентите
Можете допълнително да разделите оста y въз основа на друго ниво на фактор. Например, можете да преброите броя автоматични и ръчни трансмисии въз основа на типа цилиндър.
Ще продължите както следва:
- Стъпка 1: Създайте рамката с данни с набор от данни mtcars
- Стъпка 2: Обозначете променливата am с auto за автоматична трансмисия и man за ръчна трансмисия. Преобразувайте am и cyl като фактор, така че да не е необходимо да използвате factor() във функцията ggplot().
- Стъпка 3: Начертайте лентовата диаграма, за да преброите броя на предаванията по цилиндър
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
След като наборът от данни е готов, можете да начертаете графиката:
# Етап 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Обяснение
- Извикването на ggplot() получава данните от набора от данни и картата aes()ping.
- В aes() включвате променливата x-axis и коя променлива е необходима за запълване на лентата (т.е. am)
- geom_bar(): Създайте стълбовидна диаграма
Изход:
Картатаping ще запълни лентата с два цвята, по един за всяко ниво. Лесно е да промените групата, като изберете други факторни променливи в набора от данни.
Стълбовидна диаграма в проценти
Можете да визуализирате лентата в проценти вместо необработен брой.
# Стълбова диаграма в проценти
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Обяснение
- Използвайте position = “fill” в аргумента geom_bar(), за да създадете графика с процент по оста y.
Изход:
Една до друга решетки
Лесно е да начертаете стълбовидна диаграма с груповата променлива една до друга.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Обяснение
- position=position_dodge(): Изрично казва как да подредите лентите
Изход:
Стълбовидна диаграма с обобщена статистика
Във втората част на урока, оста y носи изчислена стойност, а не брой. Обърнете внимание, че това все още е стълбовидна диаграма: истинска хистограма е разгледана по-надолу и използва различен геометричен обект.
Вашата цел е да създадете графика със средната миля на галон за всеки тип цилиндър. За да начертаете информативна графика, ще следвате следните стъпки:
- Стъпка 1: Създайте нова променлива със средната миля на галон по цилиндър
- Стъпка 2: Създайте основна хистограма
- Стъпка 3: Променете ориентацията
- Стъпка 4: Променете цвета
- Стъпка 5: Променете размера
- Стъпка 6: Добавете етикети към графиката
Стъпка 1) Създайте нова променлива
Вие създавате рамка с данни, наречена data_histogram, която просто връща средните мили на галон по броя на цилиндрите в колата. Наричате тази нова променлива mean_mpg и закръглявате средната стойност с два знака след десетичната запетая.
# Етап 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Стъпка 2) Създайте основна хистограма
Можете да начертаете хистограмата. Тя все още не е достатъчно изпипана, за да бъде предоставена на клиент, но вече показва тенденцията.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Обяснение
- Aes() вече има две променливи. Променливата cyl се отнася за оста x, а mean_mpg е оста y.
- Предавате stat = „identity“, така че geom_bar() да използва променливата по оста y такава, каквато е, вместо да брои редове. Стойността по подразбиране за geom_bar() е stat = „count“.
Изход:
Стъпка 3) Променете ориентацията
Променяте ориентацията на графиката от вертикална на хоризонтална.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Обяснение
- Можете да контролирате ориентацията на графиката с coord_flip().
Изход:
Стъпка 4) Смени цвета
Можете да разграничите цветовете на лентите според факторното ниво на променливата по оста x.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Обяснение
- Можете да начертаете графиката по групи с картата fill=cylpingR се грижи автоматично за цветовете въз основа на нивата на променливата cyl
Изход:
Стъпка 5) Променете размера
За да направите графиката да изглежда по-красива, намалявате ширината на лентата.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Обяснение
- Аргументът за ширина във функцията geom_bar() контролира дебелината на лентата. По-голямата стойност я прави по-широка.
- Графиката се съхранява в графа на обекта, защото следващата стъпка я използва повторно непроменена. Съхраняването на междинни графики поддържа кода четим.
Изход:
Стъпка 6) Добавете етикети към графиката
Последната стъпка добавя стойността на mean_mpg като етикет във всяка лента.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Обяснение
- Функцията geom_text() е полезна за контролиране на естетиката на текста.
- label=: Добавете етикет вътре в лентите
- mean_mpg: Използвайте променливата mean_mpg за етикета
- hjust контролира къде се намира етикетът по дължината на стълбчето. Стойности, близки до 1, го поставят близо до края на стълбчето, а по-големите стойности го изместват назад към оста. Ако ориентацията на графиката е вертикална, променете hjust на vjust.
- color=”white”: Променете цвета на текста. Тук използвате белия цвят.
- size=3: Задайте размера на текста.
Изход:
Как да подредите и етикетирате стълбове в стълбовидна диаграма в R
Два финални щриха разделят черновата на диаграма от публикуваната: сортиране на стълбовете по стойност и правилно етикетиране на осите.
Пренареждане на барове. ggplot2 подрежда нивата на факторите по азбучен ред по подразбиране, което рядко е най-информативният ред. Обвийте променливата x в reorder(), за да сортирате по втора променлива:
# Sort the bars from lowest to highest mean_mpg ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) + geom_bar(stat = "identity", fill = "coral") + theme_classic()
Поставете знак минус пред променливата за сортиране, reorder(cyl, -mean_mpg), за да обърнете посоката.
Добавяне на заглавия и етикети на оси. Функцията labs() задава всеки текстов елемент с едно извикване:
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + labs(title = "Average fuel economy by cylinder count", subtitle = "mtcars dataset", x = "Number of cylinders", y = "Mean miles per gallon", fill = "Cylinders", caption = "Source: mtcars") + theme_classic()
Задайте fill = NULL вътре в labs(), за да премахнете изцяло заглавието на легендата, и използвайте theme(legend.position = “none”), за да премахнете легендата, когато оста x вече именуваше групите.
Избор на собствени цветове. Заменете палитрата по подразбиране с изрична такава, така че диаграмата да съответства на стила на вашата къща:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Как да създадете хистограма в R с geom_histogram()
Хистограмата показва как е разпределена една непрекъсната променлива. Вместо да брои категории, ggplot2 разделя числовия диапазон на интервали и преброява колко наблюдения попадат във всеки един от тях.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R отпечатва съобщение, препоръчващо да изберете по-добър брой контейнери, тъй като стойността по подразбиране от 30 контейнера е произволна. Два аргумента контролират това:
- кошчета: броят интервали, на които да се раздели диапазонът.
- ширина на контейнера: ширината на всеки интервал, изразена в мерните единици на променливата. Използвайте тази опция, когато мерните единици са смислени.
# Set the number of bins ggplot(mtcars, aes(x = mpg)) + geom_histogram(bins = 10, fill = "coral", color = "white") + theme_classic() # Or set the width of each bin instead ggplot(mtcars, aes(x = mpg)) + geom_histogram(binwidth = 4, fill = "coral", color = "white") + theme_classic()
Разделянето на интервали е най-важният избор в хистограмата. Твърде малко интервали скриват реална структура, като например втори пик; твърде много превръщат графиката в шум. Опитайте няколко стойности, преди да се спрете на една.
Сравняване на групи. Начертайте фактор, който да запълните, и задайте позицията, така че разпределенията да останат четливи:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
С position = „identičnost“ и намалена алфа, хистограмите се припокриват, така че можете да сравнявате формите директно. Използвайте position = „dodge“, ако предпочитате да виждате контейнерите един до друг.
Плътност вместо брой. Когато групите се различават по размер, начертайте плътността, така че площите да са сравними, и ги наслагвайте с изгладена крива:
ggplot(mtcars, aes(x = mpg)) + geom_histogram(aes(y = after_stat(density)), bins = 10, fill = "coral", alpha = 0.6) + geom_density(color = "steelblue", linewidth = 1) + theme_classic()
Стълбовидна диаграма и хистограма в R: Code препратка
Стълбовидната диаграма е подходяща за категорична ос x, където оста y е или брой, или обобщена статистика. Таблицата по-долу изброява извикването на ggplot2 за всеки вариант, разгледан по-горе:
| Цел | Code |
|---|---|
| Броя |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Брой с различен цвят на запълване |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Бройте с групи, подредени |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Бройте с групи, една до друга |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Преброяване с групи, подредени в % |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Стойности (обобщена статистика) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Хистограма на непрекъсната променлива |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













