Стовпчаста діаграма та гістограма в R з прикладом
⚡ Розумний підсумок
Стовпчаста діаграма та гістограма в R будуються за допомогою ggplot2, використовуючи geom_bar() для категоріального підрахунку та geom_histogram() для неперервних розподілів. У цьому посібнику налаштовується колір, група...ping, стекування, орієнтація, групування та внутрішньострокові мітки на наборі даних mtcars.

Що таке стовпчаста діаграма в R?
Гістограма — чудовий спосіб відображення категоріальних змінних на осі абсцис. Цей тип графіка позначає два аспекти на осі 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. У вашому прикладі змінна осі x — це 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 і яка змінна потрібна для заповнення смужки (тобто 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 = “identity” та зменшеною альфою гістограми перекриваються, тому ви можете безпосередньо порівнювати фігури. Використовуйте 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) |













