Гистограмма и столбчатая диаграмма в R с примерами

⚡ Умное резюме

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

  • 📊 Основное отличие: Столбчатая диаграмма суммирует значения категориальной переменной, а гистограмма разделяет непрерывную переменную на интервалы.
  • 🧱 Грамматика графики: Каждый график объединяет набор данных и карту aes().pingи геометрический объект, соединенный знаком плюс.
  • 🎨 Контроль цвета: Для получения однородного цвета поместите функцию fill внутрь функции geom_bar(), а для окрашивания полос по группам — внутрь функции aes().
  • 📐 Корректировка положения: Параметр position = “fill” преобразует количество элементов в проценты, а position_dodge() размещает сгруппированные столбцы рядом друг с другом.
  • 🔢 Построение графика значений: Значение Pass stat равно “identity”, если по оси Y уже отображается вычисленная статистика, например, среднее значение группы.
  • 📏 Группировка гистограммы: В функции geom_histogram() можно задать количество интервалов (bins) или ширину интервала (binwidth), поскольку значение по умолчанию, равное 30, редко подходит для данных.

Гистограмма в R

Что такое столбчатая диаграмма в R?

Гистограмма — отличный способ отобразить категориальные переменные по оси X. Этот тип графика обозначает два аспекта по оси Y.

  1. Первый показатель подсчитывает количество случаев в каждой группе.
  2. На втором графике по оси 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)

Часто задаваемые вопросы (FAQ)

Гистограмма используется, когда переменная по оси X является непрерывной и вы хотите увидеть ее распределение. Столбчатая диаграмма используется, когда ось X содержит различные категории и вы хотите сравнить их.

Внутри функции aes() функция fill сопоставляет переменную с цветом, поэтому каждая группа получает свой собственный оттенок. За пределами функции aes(), внутри функции geom_bar(), fill представляет собой фиксированное значение, применяемое ко всем полосам.

Универсального ответа нет. Начните с квадратного корня из количества наблюдений, а затем скорректируйте. Слишком мало интервалов скрывают структуру, например, второй пик, а слишком много приводят к шумному, неровному графику.

Гистограммы являются стандартным первым шагом в разведочном анализе данных для проектов в области искусственного интеллекта, выявляя асимметрию, выбросы и дисбаланс классов до начала обучения любой модели. Затем столбчатые диаграммы суммируют важность признаков и частоту категорий.

Да. Искусственный интеллект может создавать слои ggplot2 на основе простого описания графика и объяснять ошибки, такие как отсутствие аргумента stat. Всегда запускайте сгенерированный код на своих данных, чтобы подтвердить корректность карты.ping верно.

Подведем итог этой публикации следующим образом: