Стълбовидна диаграма и хистограма в R с пример

⚡ Умно обобщение

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

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

Хистограма на стълбовидна диаграма в R

Какво е стълбовидна диаграма в R?

Стълбовидната диаграма е чудесен начин за показване на категорични променливи по оста x. Този тип графика обозначава два аспекта на оста y.

  1. Първият отчита броя на събитията във всяка група.
  2. Вторият показва обобщена статистика (минимум, максимум, средна стойност и т.н.) на променлива по оста 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)

Въпроси и Отговори

Използвайте хистограма, когато променливата по оста x е непрекъсната и искате да видите нейното разпределение. Използвайте стълбовидна диаграма, когато оста x съдържа различни категории и искате да ги сравните.

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

Няма универсален отговор. Започнете с корен квадратен от броя на наблюденията, след което коригирайте. Твърде малко интервали скриват структура, като например втори пик, а твърде много водят до шумна, пиковидна графика.

Хистограмите са стандартната първа стъпка в проучвателния анализ на данни за проекти с изкуствен интелект, разкривайки асиметрия, отклонения и дисбаланс на класовете, преди да бъде обучен който и да е модел. След това стълбовидните диаграми обобщават важността на характеристиките и честотите на категориите.

Да. Асистентите с изкуствен интелект могат да изготвят слоеве в ggplot2 от просто описание на диаграмата и да обясняват грешки, като например липсващ аргумент за статистика. Винаги изпълнявайте генерирания код върху собствените си данни, за да потвърдите картата.ping вярно е.

Обобщете тази публикация с: