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

Что такое столбчатая диаграмма в R?
Гистограмма — отличный способ отобразить категориальные переменные по оси X. Этот тип графика обозначает два аспекта по оси Y.
- Первый показатель подсчитывает количество случаев в каждой группе.
- На втором графике по оси Y отображается сводная статистика (минимум, максимум, среднее значение и т. д.) переменной.
Вы будете использовать набор данных mtcars, который содержит следующие переменные:
- цил: Номер цилиндра в автомобиле. Числовая переменная
- am: Тип передачи. 0 для автоматического и 1 для ручного режима. Числовая переменная
- миль на галлон: миль на галлон. Числовая переменная
Поскольку гистограммы выглядят очень похоже, стоит урегулировать разницу, прежде чем писать какой-либо код.
Столбчатая диаграмма и гистограмма в 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()). Вы можете изменить цвет с помощью аргумента fill. Здесь вы выбираете коралловый цвет.
Выход:
Вы можете использовать этот код:
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 объяснение
- Используйте позицию = «заполнить» в аргументе 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=cyl map.pingR автоматически подбирает цвета на основе уровней переменной 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 объяснение
- Аргумент width в функции 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” и уменьшенном значении alpha гистограммы перекрываются, что позволяет напрямую сравнивать их формы. Используйте 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) |













