Объедините гистограмму и линейную диаграмму в ggplot2 в R

Опубликовано: 13 Сентября, 2022

Иногда при работе с иерархическими данными нам необходимо объединить два или более различных типов диаграмм в одну диаграмму для лучшей визуализации и анализа. Они известны как «комбинированные диаграммы». В этой статье мы увидим, как объединить гистограмму и линейную диаграмму на языке программирования R с использованием ggplot2.

Используемый набор данных: количество проданных курсов по сравнению с зачисленными студентами

Год Курсы проданы Процент зачисленных студентов
2014 35 30%
2015 30 25%
2016 40 30%
2017 25 50%
2018 30 40%
2019 35 20%
2020 65 60%

Чтобы построить гистограмму в R, мы используем функцию geom_bar().

Syntax:

geom_bar(stat, fill, color, width)

Parameters :  

  • stat : Set the stat parameter to identify the mode.
  • fill : Represents color inside the bars.
  • color : Represents color of outlines of the bars.
  • width : Represents width of the bars.

Кроме того, линейный график строится с помощью функции geom_line().

Синтаксис:

geom_line(mapping=NULL, data=NULL, stat=”identity”, position=”identity”,…)

Пример:

R




# Entering data
year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
  
# Creating Data Frame
perf <- data.frame(year, course, penroll)
head(perf)
  
# Plotting Multiple Charts
library(ggplot2)
  
ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="cyan",colour="#006000")+
  geom_line(aes(x=year, y=penroll),stat="identity",color="red")+
  labs(title= "Courses vs Students Enrolled in GeeksforGeeks",
       x="Year",y="Number of Courses Sold")

Выход:

На приведенном выше графике мы можем наблюдать, что столбчатый график имеет правильную форму, как и ожидалось, но линейный график просто виден. Это происходит из-за коэффициента масштабирования, поскольку линейный график представляет собой процент учащихся, который указан в десятичном виде, а текущая вертикальная ось имеет очень большие значения. Итак, нам нужна дополнительная ось, чтобы правильно разместить линию в той же области диаграммы.

Когда в дело вступает масштабирование, мы должны использовать функцию R scale_y_continuous(), которая входит в пакет ggplot2. Кроме того, другая функция sec_axis() используется для добавления вторичной оси и присвоения ей спецификаций.

Syntax:

sec_axis(trans,name,breaks,labels,guide)

Parameters :

  • trans : A formula or function needed to transform.
  • name : The name of the secondary axis.

Поскольку мы имеем дело со вторичной осью Y, нам нужно написать команду внутри scale_y_continuous().

Синтаксис:

scale_y_continuous(name,labels,position,sec.axis,limits,breaks)

Коэффициент масштабирования — самая сложная часть при работе со вторичной осью. Поскольку вторичная ось должна быть в процентах, мы должны использовать масштабный коэффициент 0,01 и записать формулу преобразования в аргументе trans функции sec_axis() . И вы масштабируете с 0,01 в формуле, вы также должны умножить ту же ось на 100 в geom_line() , чтобы сделать баланс в масштабировании.

Пример:

R




# Entering data
year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
  
# Creating Data Frame
perf <- data.frame(year, course, penroll)
  
# Plotting Charts and adding a secondary axis
library(ggplot2)
ggp <- ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="cyan",colour="#006000")+
  geom_line(aes(x=year, y=100*penroll),stat="identity",color="red",size=2)+
  labs(title= "Courses vs Students Enrolled in GeeksforGeeks",
       x="Year",y="Number of Courses Sold")+
  scale_y_continuous(sec.axis=sec_axis(~.*0.01,name="Percentage"))
ggp

Выход:

Добавленная вторичная ось будет иметь форму дробного значения, как мы можем видеть выше. Но нам нужна вторичная ось в процентах. Чтобы преобразовать в проценты, мы должны использовать метки аргументов внутри функции sec_axis().

Некоторые важные используемые ключевые слова:

  • масштаб: используется для масштабирования данных. Коэффициент масштабирования умножается на исходное значение данных.
  • метки: используется для присвоения меток.

Используется функция scale_y_continuous() , которая является шкалой по умолчанию в «y-эстетике» в библиотеке ggplot2. Поскольку нам нужно добавить «процент» в метки оси Y, используется ключевое слово «метки» .

Теперь используйте приведенную ниже команду, чтобы преобразовать метки оси Y в проценты.

scales : : percent 

Это просто масштабирует данные по оси Y от десятичной до процентной. Текущее значение умножается на 100. Масштабный коэффициент равен 100.

Пример:

R




# Entering data
year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
  
# Creating Data Frame
perf <- data.frame(year, course, penroll)
  
# Plotting Multiple Charts and changing 
# secondary axis to percentage
library(ggplot2)
ggp <- ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="cyan",colour="#006000")+
  geom_line(aes(x=year, y=100*penroll),stat="identity",color="red",size=2)+
  labs(title= "Courses vs Students Enrolled in GeeksforGeeks",
       x="Year",y="Number of Courses Sold")+
  scale_y_continuous(sec.axis=sec_axis(
    ~.*0.01,name="Percentage of Students Enrolled", labels=scales::percent))
ggp

Выход: