Librerías

Como ya tenemos instalados los paquetes que utilizaremos, ahora resta decirle a R de manera explícita cuáles son los paquetes que queremos usar, en este caso:

library(gapminder)
library(here)
library(tidyverse)
library(DT)

Un vistazo al set de datos Gapminder

Antes de empezar a graficar, inspeccionaremos el dataset gapminder, el cual es un paquete que contiene datos sobre población, expectativa de vida y PIB per cápita de los cinco continentes y sus respectivos países entre los años 1952 y 2007.

En primer lugar, utilizaremos la función str para conocer la estructura de nuestro conjunto de datos, es decir, cuántas observaciones contiene, cuáles variables y de qué tipo son, tal como se observa:

 str(gapminder)
## Classes 'tbl_df', 'tbl' and 'data.frame':    1704 obs. of  6 variables:
##  $ country  : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ year     : int  1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
##  $ lifeExp  : num  28.8 30.3 32 34 36.1 ...
##  $ pop      : int  8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
##  $ gdpPercap: num  779 821 853 836 740 ...

En segundo lugar, utilizaremos la función datatable del paquete DT, la cual mostrará el conjunto de datos en el formato de tabla interactiva, la cual nos permite realizadar un recorrido rápido por los datos, e incluso buscar algún dato en particular, por ejemplo, los datos correspondientes a Argentina.

 datatable(gapminder)

Gráfico paso a paso ¿Lo hacemos en capas?

1. Datos

Luego de darle un vistazo a los datos, estamos en condiciones de comenzar a graficar, el primer paso es ggplot(data = gapminder), de esta manera creamos un objeto ‘ggplot’ que utilizará los datos de la tabla gapminder.

# el símbolo '<-' representa asignación, el cual nos permite asignar el objeto ggplot a una variable, en este caso, 'p'.

p <- ggplot(data = gapminder)

Importante: cada vez que querramos agregar una nueva capa al gráfico utilizamos el operador ‘+’, seguido de la capa deseada (función_geom, labs, theme, etc.).

2. Atributos estéticos

Mediante el mapeo o mapping le decimos a ggplot cuáles son las variables que queremos representar mediante elementos del gráfico. Elegimos las variables gdpPercap, lifeExp y continent, donde la primera estará asignada a ‘x’, la segunda a ‘y’ y la última al atributo color, por el cual se asignará un color diferente por cada valor distinto de la variable continente.

Otros elementos estéticos pueden incluir, por ejemplo, shape y size.

p <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp, color=continent))
p

3. Función Geom

Recuerda que cada geom es una función y que una función lleva argumentos, los cuales generalmente son opcionales. Queremos graficar un diagrama de dispersión o scatterplot, entonces elegimos la función geom_point y le pasamos como argumento size= 3, con esto le indicamos a ggplot el tamaño de los puntos que se aplicará al gráfico.

p + geom_point(size=3)

En la figura anterior podemos observar la relación existente entre el ingreso bruto per cápita y la esperanza de vida de cada país.

4. Sistemas de coordenadas y escalas

# A partir de acá comenzaremos a codear el gráfico completo para que el proceso sea más claro:

p <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent)) +
     geom_point(size=3) +
     coord_cartesian() +
     scale_x_log10(labels= scales::dollar)
 
p

5. Etíquetas y guías

Con la capa de labs o ‘etiquetas’ defino título, subtítulo y caption del gráfico. Además, especifico color= " " para eliminar el título de la leyenda correspondiente a la variable ‘continente’ por ser redundante. Además con la capa de guides o ‘guía’ modifico el tamaño de las formas (puntos) de la leyenda correspondiente a la variable continente.

ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent)) + 
      geom_point(size=3) +
      coord_cartesian() +
      scale_x_log10(labels= scales::dollar) +
      labs(x = "Ingreso (GDP) Per Capita", y = "Esperanza de vida en años",
           title = "Crecimiento económico y esperanza de vida",
           subtitle = "Los puntos se representan por año-país",
           caption = "DataSource: Gapminder - Link: https://www.gapminder.org", color=" ") +
      guides(color = guide_legend(override.aes = list(size = 5)))

6. Paleta de colores

¿Y si queremos cambiar el color?

Existen muchos paquetes de paletas de colores y cada uno ofrece diferentes opciones, por ejemplo el paquete RColorBrewer ofrece:

  • Opciones de paletas cualitativas
library(RColorBrewer)
display.brewer.all(type = "qual")

  • Opciones de paletas cuantitativas
display.brewer.all(type = "seq")

  • Opciones de paletas divergentes
display.brewer.all(type = "div")

Probamos la opción Set2

Utilizamos la opción scale_color_brewer(palette= "Set2").

pSet2 <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color= continent)) + 
                geom_point(size=3) +
                scale_color_brewer(palette="Set2") +
                coord_cartesian() +
                scale_x_log10(labels= scales::dollar) +
                labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
                       title = "Crecimiento económico y esperanza de vida",
                       subtitle = "Los puntos se representan por año-país",
                       caption = "DataSource: Gapminder - Link: https://www.gapminder.org", color=" ") +
                guides(color = guide_legend(override.aes = list(size = 5)))

pSet2

Probamos la opción Dark2

Utilizamos la opción scale_color_brewer(palette= "Dark2").

pdark2 <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent)) + 
                geom_point(size=3)+
                scale_color_brewer(palette="Dark2") +
                coord_cartesian() +
                scale_x_log10(labels= scales::dollar) +
                labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
                     title = "Crecimiento económico y esperanza de vida",
                     subtitle = "Los puntos se representan por año-país",
                     caption = "DataSource: Gapminder - Link: https://www.gapminder.org", color=" ") +
                guides(color = guide_legend(override.aes = list(size = 5)))

pdark2 

¿Y si queremos trabajar con nuestra propia paleta de colores?

Utilizamos una escala manual de colores, donde especificamos los colores elegidos y las etiquetas de cada uno de ellos:

scale_color_manual(values= c("color1", "color2",..., "colorN"), labels= c("nombre1", "nombre2",..., "nombreN"))

pmanual <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent)) + 
                  geom_point(size=3) +
                  scale_color_manual(values = c("#41b6a6", "#f6e37c",   "#f5a26b","#51b8df","#713580"), labels = c("Africa", "América","Asia",  "Europa", "Oceanía")) +
                  coord_cartesian() +
                  scale_x_log10(labels= scales::dollar) +
                  labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
                     title = "Crecimiento económico y esperanza de vida",
                     subtitle = "Los puntos se representan por año-país",
                     caption = "DataSource: Gapminder - Link: https://www.gapminder.org", color=" ") +
                  guides(color = guide_legend(override.aes = list(size = 5)))

pmanual

7. Temas

Para cambiar la apariencia del gráfico podemos agregar otra capa con un tema en particular, existen temas que vienen ya incluidos en ggplot2 como, por ejemplo:

  • theme_bw()
  • theme_minimal()
  • theme_dark()
  • theme_grey()
  • theme_gray()

Theme_grey

p_theme_bw <- ggplot(data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent)) + 
                    geom_point(size=3)+
                    scale_color_manual(values = c("#41b6a6", "#f6e37c",   "#f5a26b","#51b8df","#713580"), labels = c("Africa", "América","Asia",  "Europa", "Oceanía")) +
                    coord_cartesian() +
                    scale_x_log10(labels= scales::dollar) +
                    labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
                         title = "Crecimiento económico y esperanza de vida",
                         subtitle = "Los puntos se representan por año-país",
                         caption = "DataSource: Gapminder - Link: https://www.gapminder.org", color=" ") +
                    guides(color = guide_legend(override.aes = list(size = 5))) +
                    theme_grey()

p_theme_bw

Theme_classic

ptheme_classic <- ggplot( data = gapminder,mapping = aes(x = gdpPercap,y = lifeExp,color = continent)) + 
                        geom_point(size=3) +
                        scale_color_manual(values = c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels = c("Africa", "América","Asia",  "Europa", "Oceanía")) +
                        coord_cartesian() +
                        scale_x_log10(labels= scales::dollar) +
                        labs(x = "Ingreso (GDP) Per Cápita", y = "Esperanza de vida",
                             title = "Crecimiento económico y esperanza de vida",
                             subtitle = "Los puntos se representan por año-país",
                             caption = "DataSource: Gapminder - Link: https://www.gapminder.org", color=" ") +
                        guides(color = guide_legend(override.aes = list(size = 5))) +
                        theme_classic()
 
ptheme_classic

¿Cómo customizamos el theme? Manos a la obra.

En el siguiente paso vamos a customizar el theme o tema, para lo cual definiremos dos parámetros text_size y margin_size, que luego utilizaremos para modificar el tamaño del título, subtítulo y leyenda.

  • Con legend.position= "bottom" cambiamos la posición de la leyenda correspondiente a continente, en este caso, le indicamos a R que la leyenda estará ubicada en la parte inferior del gráfico.

  • Con legend.key= element_rect(fill= 'NA') eliminamos el recuadro gris de las leyendas.

  • Con legend.text= element_text(color= "#2c204d", size= text_size) especificamos el color y el tamaño del texto de la leyenda.

  • Con plot.title= element_text(size = text_size * 1.8,family= "Garamond", hjust = 0.5,vjust = 1,colour = "#2c204d", ...) especificamos el tamaño, fuente, ubicación y color del título.

  • Con plot.subtitle= element_text(size = text_size * 1.3, family= "Garamond", hjust = 0.5,vjust = 1,colour = "#2c204d", ...) especificamos el tamaño, fuente, ubicación y color del título.

  • Con plot.caption= element_text(size = 11,family = "Garamond", hjust = 1, vjust = 1, colour = "#2c204d",...) especificamos el tamaño, fuente, ubicación y color del título.

# Para no repetir los mismos valores de tamaño del texto en el theme, defino un parámetro: text_size y una variable: margin_size.

text_size <-16   # tamaño base del texto
margin_size <- text_size/2  #de los margenes

pTheme_customizado <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color= continent)) +
                              geom_point(size=3,alpha=0.6)+
                              scale_x_log10(labels= scales::dollar) +
                              scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía")) +
                              labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
                                  title ="Crecimiento económico y esperanza de vida", 
                                  subtitle ="Los puntos se representan por año-país", 
                                  caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
                              guides(color = guide_legend(override.aes = list(size = 5))) +
                              theme_light() +
                              theme(legend.position="bottom", legend.key= element_rect(fill='NA'),
                                    legend.text= element_text(color="#2c204d", 
                                                              size= text_size), 
                                    legend.justification = "center",
                                    
                                    plot.title = element_text(size=(text_size * 1.8),family ="Garamond",    
                                                          hjust = 0.5,vjust = 1,
                                                          colour = "#2c204d", #
                                                          face = 'bold', 
                                                          margin = margin(b = margin_size * 1.2)),
                                     plot.subtitle = element_text(size = text_size * 1.3,
                                                         family ="Garamond", hjust = 0.5, vjust = 1, 
                                                         colour = "#2c204d",
                                                        margin = margin(b = margin_size * 0.9)),
                                     plot.caption = element_text(size = 11,family ="Garamond",
                                                                hjust = 1, vjust = 1,
                                                                colour = "#2c204d", 
                                                                face='bold',
                                                                margin = margin(t = margin_size * 0.9)),
                                     panel.background = element_rect(fill = "white"),
                                     panel.grid.major = element_line(color = "gray90", size = 0.5),
                                     panel.grid.minor = element_line(color = "gray90", size = 0.25))
                            
pTheme_customizado

8. ¿Cómo guardamos lo hecho hasta aquí?

Utilizamos la sentencia ggsave ("nombre.extension", height= n, width= m, units= "in", type= ' '), como argumento le pasamos el nombre del gráfico con la extensión deseada (png, pdf, svg, entre otras), dimensiones del gráfico con height y width o con dpiy unidades con units en “in”,“cm” o “mm”).

ggsave(here("grafico_scatterplot1.png"), height = 8, width = 10, units = "in", type= 'cairo')

Extras

9. Agregar una nueva capa

El objetivo es agregar al gráfico, una curva suavizada correspondiente a una función de regresión, entonces vamos a utilizar la funcion geom_smooth. Entre los métodos a aplicar, tenemos:

  • geom_smooth(method = "gam")
  • geom_smooth(method = "lm")
  • geom_smooth(method = "glm")
  • geom_smooth(method = "loess")

En nuestro caso, utilizaremos la primera opción method = "gam" y recuerda que una función geom puede tener múltiples argumentos:

geom_smooth(method = 'gam', col = "#2c204d", size = 0.7, fill = "gray60", alpha = 0.2).

De esta manera, le indicamos a ggplot el método que utilizaremos además del color, tamaño, relleno y transparencia de la línea.

text_size <-14              # tamaño base del texto
margin_size <- text_size/2  # para el margen

# Asignamos el gráfico `ggplot' al objeto p_capa_smooth
p_capa_smooth <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp)) +
                          geom_point(aes(color=continent),size=3,alpha=0.6) +
                          geom_smooth(method = 'gam', col = "#2c204d", size = 0.7,
                                      fill = "gray60", alpha = 0.2) +
                          scale_x_log10(labels= scales::dollar) +
                          scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía")) +
                          labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
                               title ="Crecimiento económico y esperanza de vida",
                               subtitle ="Los puntos se representan por año-país" , 
                               caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", 
                               color= '', fill="Población") +
                          guides(color = guide_legend(override.aes = list(size = 5))) +
                          theme_light() +
                          theme(legend.position="bottom", legend.key= element_rect(fill='NA'),
                                legend.text= element_text(color="#2c204d", 
                                                          size= text_size), 
                                legend.justification = "center",
                                plot.title = element_text(size=(text_size * 1.8),family ="Garamond",    
                                                      hjust = 0.5,vjust = 1,
                                                      colour = "#2c204d", #
                                                      face = 'bold', 
                                                      margin = margin(b = margin_size * 1.2)),
                                plot.subtitle = element_text(size = text_size * 1.3,
                                                     family ="Garamond", hjust = 0.5, vjust = 1, 
                                                     colour = "#2c204d",
                                                    margin = margin(b = margin_size * 0.9)),
                                plot.caption = element_text(size = 11,family ="Garamond",
                                                            hjust = 1, vjust = 1,
                                                            colour = "#2c204d", 
                                                            face='bold',
                                                            margin = margin(t = margin_size * 0.9)),
                                panel.background = element_rect(fill = "white"),
                                panel.grid.major = element_line(color = "gray90", size = 0.5),
                                panel.grid.minor = element_line(color = "gray90", size = 0.25))

# llamamos al objeto p_capa_smooth
p_capa_smooth

# Guardamos el gráfico  con ggsave
ggsave(here("grafico_smooth.png"), height = 8, width = 10, units = "in", type='cairo')

10. Facetas

Vamos a separar por columnas con facet_wrap teniendo en cuenta la variable continente

p_facet <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
                  geom_point(size=3,alpha=0.6)+
                  geom_smooth(method = 'gam', col = "#2c204d", size = 0.7,
                              fill = "gray60", alpha = 0.2)+
                  scale_x_log10(labels= scales::dollar)+
                  scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
                  labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
                       title ="Crecimiento económico y esperanza de vida", 
                       subtitle ="Los puntos se representan por año-país" , 
                       caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
                  guides(color = guide_legend(override.aes = list(size = 5)))+
                  theme_bw()+
                  theme(legend.position="bottom")+
                  facet_wrap(~continent, ncol = 2, scales="free")

p_facet

# Guardamos el gráfico
ggsave(here("grafico_facet.png"), height = 8, width = 10, units = "in", type='cairo')

11. Themes personalizados con el paquete hrbrthemes

El paquete hrbrthemes ofrece varias opciones de temas para aplicar a un gráfico, algunas son:

  • theme_ipsum()
  • theme_ft_rc()
  • theme_ipsum_ps()
  • theme_ipsum_rc()
  • theme_ipsum_tw()

Entonces, en lugar de utilizar un theme customizado, eligiremos la última opción theme_ipsum_tw(), así obtendremos el siguiente gráfico:

# Cargo la librería, en este caso, voy a utilizar la opción theme_ipsum_tw()
library(hrbrthemes)

# Importamos la fuente ´titillium_web´que necesitamos para el theme elegido ya que no la tenemos instalada con anterioridad.
hrbrthemes::import_titillium_web()



p_facet_ipsum_tw <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
                            geom_point(size=3,alpha=0.6)+
                            scale_x_log10(labels= scales::dollar)+
                            scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
                            labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
                                 title ="Crecimiento económico y esperanza de vida",
                                 subtitle ="Los puntos se representan por año-país" , 
                                 caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
                            guides(color = guide_legend(override.aes = list(size = 5)))+
                            theme_ipsum_tw()+
                            theme(legend.position="bottom")+
                            facet_wrap(~continent, ncol = 2, scales="free") 

p_facet_ipsum_tw

# Guardamos el gráfico
ggsave(here("grafico_facet_ipsum_tw.png"), height = 8, width = 10, units = "in", type='cairo')

En cambio, si utilizamos la segunda opción theme_ft_rc(), entonces obtendremos el siguiente gráfico:

# Importamos la fuente ´roboto condensed´ que necesitamos para el theme elegido ya que no la tenemos instalada con anterioridad.

hrbrthemes::import_roboto_condensed()

p_facet_dark <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
                        geom_point(size=3,alpha=0.6)+
                        scale_x_log10(labels= scales::dollar)+
                        scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
                        labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
                             title ="Crecimiento económico y esperanza de vida", 
                             subtitle ="Los puntos se representan por año-país" , 
                             caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
                        guides(color = guide_legend(override.aes = list(size = 5)))+
                        theme_ft_rc()+
                        theme(legend.position="bottom")+
                        facet_wrap(~continent, ncol = 2, scales="free") 

p_facet_dark

# Guardamos el gráfico
ggsave(here("grafico_facet_dark.png"), height = 8, width = 10, units = "in", type='cairo')

12. Gráficos combinados con el Paquete patchwork

Utilizaremos la librería patchwork para combinar dos gráficos (el gráfico p_capa_smooth con el gráfico facetado p_facet_ipsum_tw), pero antes debo generarlos nuevamente sin título, ni subtítulo ni caption, ya que esos elementos los agrego al unirlos con patchwork.

Generamos la primer figura

text_size <-16   # tamaño base del texto

p1 <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp))+
              geom_point(aes(color=continent),size=3,alpha=0.6)+
              geom_smooth(method = 'gam', col = "#2c204d", size = 0.7,
                          fill = "gray60", alpha = 0.2)+
              scale_x_log10(labels= scales::dollar)+
              scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
              labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años", color= '')+
              guides(color = guide_legend(override.aes = list(size = 5)))+
              theme(legend.position="bottom", legend.key= element_rect(fill='NA'),
                    legend.text= element_text(color="#2c204d", size= text_size), 
                    legend.justification = "center",
                    panel.background = element_rect(fill = "white"),
                    panel.grid.major = element_line(color = "gray90", size = 0.5),
                    panel.grid.minor = element_line(color = "gray90", size = 0.25))

p1

Generamos la segunda figura

p2 <-ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent))+
            geom_point(size=3,alpha=0.6)+
            scale_x_log10(labels= scales::dollar)+
            scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
            labs(x="", y="Esperanza de vida en años", color= '')+
            guides(color = guide_legend(override.aes = list(size = 5)))+
            theme_ipsum_tw()+
            theme(legend.position="none", axis.text.y = element_text(size = 12))+
            # con legend.position= "none", elimino las leyenda correspondiente a la variable de continente 
            facet_wrap(~continent, ncol = 2, scales="free") # 
p2

ggsave(here("grafico_p2.png"), height = 8, width = 10, units = "in", type='cairo')

Podemos elegir combinar los dos figuras así:

  • p1 + p2, una figura a continuación de la otra
  • p1 / p2, la primera figura en la parte superior y la segunda en la parte inferior.

Con plot_annotation() agrego título, subtítulo y caption al gráfico combinado y con el theme defino el tamaño de las etiquetas.

library(patchwork)

# combino ambos gráficos
graficos_combinados <- p1/ p2 +            
                       plot_annotation(title = "Crecimiento económico y esperanza de vida", 
                                       subtitle = "Los puntos se representan por año-país" , 
                                       caption = "DataSource: Gapminder- Link: https://www.gapminder.org.") +   
                       theme (plot.title = element_text(size = 18), 
                              plot.subtitle = element_text(size = 14), 
                              plot.caption = element_text(size = 14))  

# llamamos al objeto p_capa_smooth
graficos_combinados

# Guardamos el gráfico realizado con patchwork 
ggsave(here("grafico_patchwork.png"), height = 12, width = 14, units = "in", type='cairo')

13. Gráficos interactivos con plotly

Utilizamos la librería plotly para convertir gráficos estáticos generados con ggplot2 en gráficos interactivos.

Aclaración: Es necesario volver a ejecutar el gráfico de la sección 9 para formatear la presentación de los variables, continente, ingreso per cápita y esperanza de vida que luego se mostraran en el gráfico interactivo. ¿Cómo lo hago? El formateo se realiza en la parte de los mapeos estéticos:

aes(text = paste( '<b>Continente:</b>' , continent, '<br />' , '<b>Ingreso per cápita:</b>' , '$', ...))

Con la sentencia ggplotly(p_capa_smooth, tooltip = "text") convierto la figura anterior en una interactiva y con ‘tooltip = “text”’ le indicó que me muestre las variables con el formato especificado anteriormente.

# Cargamos la líbreria plotly
library(plotly)

# Forma directa de utilizar plotly
ggplotly(p_capa_smooth, tooltip = "text")

Gráfico en facetas interactivo:

p_facet_dark <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, color=continent, text = paste('<b>Continente:</b> ' , continent,'<br />','<b>Ingreso per cápita:</b> ','$', round(gdpPercap,2),'<br>', '<b>Expectativa de vida:</b> ', round(lifeExp,1)))) +
  geom_point(size=3,alpha=0.6)+
  scale_x_log10(labels= scales::dollar)+
  scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía"))+
  labs(x="Ingreso (PBI) Per Capita", y="Esperanza de vida en años",
       title ="Crecimiento económico y esperanza de vida", subtitle ="Los puntos se representan por año-país" , caption = "DataSource: Gapminder- Link: https://www.gapminder.org.", color= '')+
  guides(color = guide_legend(override.aes = list(size = 5)))+
  theme_ft_rc()+
  theme(legend.position="bottom")+
  facet_wrap(~continent, ncol = 2, scales="free") 



ggplotly(p_facet_dark, tooltip = "text")
## **14- Gráficos animados con gganimate**

# Utilizaremos la librería [gganimate](https://github.com/thomasp85/gganimate) para convertir los gráficos estáticos en gráficos interactivos.
# 
# 
# library(gganimate)
# install.packages("gifski")
# library(gifski)

# ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = continent)) +
#   geom_point(alpha = 0.7, show.legend = FALSE) +
#   scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"), labels= c("Africa", "America", "Asia","Europa", "Oceanía")) +
#   scale_size(range = c(2, 12)) +
#  scale_x_log10(labels= scales::dollar) +
#   facet_wrap(~continent) +
#   # Here comes the gganimate specific bits
#   labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
#   transition_time(year) +
#   ease_aes('linear')


# pFacet_Animado <- ggplot(data=gapminder, mapping=aes(x= gdpPercap, y= lifeExp, 
#                                                      size = pop, color=continent))+
#   geom_point(size=3,alpha=0.7) +
#   scale_x_log10(labels= scales::dollar) +
#   scale_color_manual(values= c("#41b6a6", "#f6e37c","#f5a26b","#51b8df","#713580"),     labels= c("Africa", "America", "Asia","Europa", "Oceanía")) +
#   scale_size(range = c(2, 12)) +
#   guides(color = guide_legend(override.aes = list(size = 5))) +
#   theme_ft_rc() +
#   theme(legend.position="bottom") +
#   facet_wrap(~continent, ncol = 2, scales="free") +
#   labs(title ="Crecimiento económico y esperanza de vida", subtitle = 'Año: {round(frame_time,0)}', x="Ingreso (PBI) Per Cápita", y="Esperanza de vida en años",
#        caption = "DataSource: Gapminder - Link: https://www.gapminder.org.", 
#        color= '') +
#       transition_time(year) +
#       ease_aes('linear') +
#   shadow_mark(alpha = 0.6, size = 2.5)
# 
#   
# pFacet_Animado 
# 
# 
# 
# last_animation()   # o               
# animate(pFacet_Animado)
# anim_save("gganimate_orange.gif")
# 
# 
# 
# 
# save_animation(here("prueba.gif"))

Referencias