Combinar gráfico de barras y líneas en ggplot2 en R

A veces, cuando tratamos con datos jerárquicos, necesitamos combinar dos o más tipos de gráficos en un solo gráfico para una mejor visualización y análisis. Estos se conocen como «gráficos combinados». En este artículo, vamos a ver cómo combinar un gráfico de barras y un gráfico de líneas en el lenguaje de programación R usando ggplot2.

Conjunto de datos en uso: cursos vendidos frente a estudiantes inscritos

Año Cursos vendidos Porcentaje de estudiantes matriculados
2014 35 30%
2015 30 25%
2016 40 30%
2017 25 50%
2018 30 40%
2019 35 20%
2020 sesenta y cinco 60%

Para trazar un gráfico de barras en R, usamos la función geom_bar().

Sintaxis:

geom_bar(estadísticas, relleno, color, ancho)

Parámetros:  

  • stat : Configure el parámetro stat para identificar el modo.
  • relleno: representa el color dentro de las barras.
  • color : Representa el color de los contornos de las barras.
  • ancho: Representa el ancho de las barras.

Además, el diagrama de líneas se traza utilizando la función geom_line().

Sintaxis:

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

Ejemplo:

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

Producción:

En el gráfico anterior, podemos observar que el gráfico de barras está en la forma adecuada como se esperaba, pero el gráfico de líneas es simplemente visible. Ocurre debido al factor de escala ya que el gráfico de líneas es para el porcentaje de estudiantes que está en decimal y el eje vertical actual tiene valores muy grandes. Entonces, necesitamos un eje secundario para ajustar la línea correctamente en la misma área del gráfico.

Como la escala entra en escena, tenemos que usar la función de R scale_y_continuous() que viene en el paquete ggplot2. Además, se usa otra función sec_axis() para agregar un eje secundario y asignarle las especificaciones. 

Sintaxis:

sec_axis(trans,nombre,descansos,etiquetas,guía)

Parámetros :

  • trans : Una fórmula o función necesaria para transformar.
  • name : El nombre del eje secundario.

Dado que estamos tratando con un eje Y secundario, necesitamos escribir el comando dentro de scale_y_continuous(). 

Sintaxis:

scale_y_continuous(nombre,etiquetas,posición,sec.eje,límites,cortes)

El factor de escala es la parte más difícil de manejar cuando se trata de un eje secundario. Dado que el eje secundario debe estar en porcentaje, debemos usar el factor de escala de 0.01 y escribir la fórmula de conversión en el argumento trans de sec_axis() . Y está escalando con 0.01 en la fórmula, también tiene que multiplicar el mismo eje con 100 en geom_line( ) para equilibrar la escala.

Ejemplo:

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

Producción:

El eje secundario agregado será en forma de valor fraccionario como podemos ver arriba. Pero necesitamos el eje secundario en porcentaje. Para convertir a porcentaje, tenemos que usar las etiquetas de argumentos dentro de sec_axis().

Algunas palabras clave importantes utilizadas son:

  • escala: Se utiliza para escalar los datos. Un factor de escala se multiplica por el valor de los datos originales.
  • etiquetas: Se utiliza para asignar etiquetas.

La función utilizada es scale_y_continuous(), que es una escala predeterminada en «y-aesthetics» en la biblioteca ggplot2. Como necesitamos agregar «porcentaje» en las etiquetas del eje Y, se usa la palabra clave «etiquetas»

Ahora use debajo del comando para convertir las etiquetas del eje y en porcentajes. 

escalas : : porcentaje 

Esto simplemente escalará los datos del eje y de decimal a porcentaje. Multiplica el valor actual por 100. El factor de escala es 100.

Ejemplo:

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

Producción:

Publicación traducida automáticamente

Artículo escrito por rishabhchakrabortygfg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *