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