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

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

  1. Първият отчита броя на срещанията между групите.
  2. Вторият показва обобщена статистика (мин., макс., средно и т.н.) на променлива по оста y.

Ще използвате набора от данни mtcars със следните променливи:

  • cyl: Номер на цилиндъра в колата. Числова променлива
  • am: Тип предаване. 0 за автоматичен и 1 за ръчен. Числова променлива
  • mpg: Мили на галон. Числова променлива

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

За да създадете графика в 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_bar(). Кодът по-долу е най-основният синтаксис.

library(ggplot2)
# Most basic bar chart
ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

Обяснение на кода

  • Предавате набора от данни mtcars на ggplot.
  • Вътре в аргумента aes() добавяте оста x като факторна променлива (cyl)
  • Знакът + означава, че искате R да продължи да чете кода. Той прави кода по-четлив, като го разбива.
  • Използвайте geom_bar() за геометричния обект.

Изход:

Стълбовидна диаграма: брой

Забележка: уверете се, че конвертирате променливите във фактор, в противен случай R третира променливите като числови. Вижте примера по-долу.

Стълбовидна диаграма: брой

Персонализирайте графиката

Четири аргумента могат да бъдат предадени за персонализиране на графиката:

- `stat`: Control the type of formatting. By default, `bin` to plot a count in the y-axis. For continuous value, 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()

Обяснение на кода

  • Цветовете на лентите се контролират от картографирането на aes() вътре в геометричния обект (т.е. не в ggplot()). Можете да промените цвета с аргументите за запълване. Тук вие избирате коралов цвят.

Изход:

Променете цвета на лентите

Можете да използвате този код:

grDevices::colors()

за да видите всички налични цветове в R. Има около 650 цвята.

Променете интензивността

Можете да увеличите или намалите интензитета на цвета на лентите

# Change intensity
ggplot(mtcars,
        aes(factor(cyl))) +
    geom_bar(fill = "coral",
        alpha = 0.5) +
    theme_classic()

Обяснение на кода

  • За да увеличите/намалите интензитета на лентата, можете да промените стойността на алфа. Голямата алфа увеличава интензитета, а ниската алфа намалява интензитета. алфа варира от 0 до 1. Ако е 1, тогава цветът е същият като палитрата. Ако 0, цветът е бял. Избирате алфа = 0.1.

Изход:

Променете интензитета

Оцветете по групи

Можете да промените цветовете на лентите, което означава един различен цвят за всяка група. Например променливата cyl има три нива, след което можете да начертаете лентовата диаграма с три цвята.

# Color by group
ggplot(mtcars, aes(factor(cyl),
        fill = factor(cyl))) +
    geom_bar()

Обяснение на кода

  • Аргументът fill вътре в aes() позволява промяна на цвета на лентата. Можете да промените цвета, като зададете fill = променлива на оста x. Във вашия пример променливата на оста x е cyl; запълване = фактор (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()

Обяснение на кода

  • ggpplot() съдържа данните от набора от данни и aes().
  • В aes() включвате променливата x-axis и коя променлива е необходима за запълване на лентата (т.е. am)
  • geom_bar(): Създайте стълбовидна диаграма

Изход:

Добавете група в лентите

Картографирането ще запълни лентата с два цвята, по един за всяко ниво. Лесно е да промените групата, като изберете други факторни променливи в набора от данни.

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

Можете да визуализирате лентата в проценти вместо необработен брой.

# Стълбова диаграма в проценти

ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = "fill") +
    theme_classic()

Обяснение на кода

  • Използвайте position = “fill” в аргумента geom_bar(), за да създадете графика с процент по оста y.

Изход:

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

Една до друга решетки

Лесно е да начертаете стълбовидна диаграма с груповата променлива една до друга.

# Bar chart side by side
ggplot(data, aes(x = cyl, fill = am)) +
    geom_bar(position = position_dodge()) +
    theme_classic()

Обяснение на кода

  • 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")

Обяснение на кода

  • Aes() вече има две променливи. Променливата cyl се отнася за оста x, а mean_mpg е оста y.
  • Трябва да подадете аргумента stat=”identity”, за да посочите променливата в оста y като числова стойност. geom_bar използва stat=”bin” като стойност по подразбиране.

Изход:

Хистограма

Стъпка 3) Променете ориентацията

Променяте ориентацията на графиката от вертикална на хоризонтална.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) +
    geom_bar(stat = "identity") +
    coord_flip()

Обяснение на кода

  • Можете да контролирате ориентацията на графиката с coord_flip().

Изход:

Хистограма

Стъпка 4) Смени цвета

Можете да разграничите цветовете на лентите според факторното ниво на променливата по оста x.

ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    theme_classic()

Обяснение на кода

  • Можете да начертаете графиката по групи с картографирането fill= cyl. R се грижи автоматично за цветовете въз основа на нивата на променливата 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()

Обяснение на кода

  • Аргументът за ширина вътре в geom_bar() контролира размера на лентата. По-голямата стойност увеличава ширината.
  • Забележете, че съхранявате графиката в графиката на променливата. Правите го, защото следващата стъпка няма да промени кода на графиката на променливата. Подобрява четливостта на кода.

Изход:

Хистограма

Стъпка 6) Добавете етикети към графиката

Последната стъпка се състои в добавяне на стойността на променливата mean_mpg в етикета.

graph +
    geom_text(aes(label = mean_mpg),
        hjust = 1.5,
        color = "white",
        size = 3) +
    theme_classic()

Обяснение на кода

  • Функцията geom_text() е полезна за контролиране на естетиката на текста.
    • label=: Добавете етикет вътре в лентите
    • mean_mpg: Използвайте променливата mean_mpg за етикета
  • hjust контролира местоположението на етикета. Стойности, затворени до 1, показват етикета в горната част на лентата, а по-високите стойности извеждат етикета в долната част. Ако ориентацията на графиката е вертикална, променете hjust на vjust.
  • color=”white”: Променете цвета на текста. Тук използвате белия цвят.
  • size=3: Задайте размера на текста.

Изход:

Хистограма

Oбобщение

Стълбовата диаграма е полезна, когато оста x е категорична променлива. Оста y може да бъде или преброяване, или обобщена статистика. Таблицата по-долу обобщава как да контролирате лентова диаграма с ggplot2:

Цел код
Броя
ggplot(df, eas(x= factor(x1)) + geom_bar()
Брой с различен цвят на запълване
ggplot(df, eas(x= factor(x1), fill = factor(x1))) + geom_bar()
Бройте с групи, подредени
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge())
Бройте с групи, една до друга
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar()
Преброяване с групи, подредени в %
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge())
Ценности
ggplot(df, eas(x= factor(x1)+ y = x2) + geom_bar(stat="identity")