3  Empleo de plotly

Vamos a crear un gráfico de burbujas interactivo con el paquete plotly, usando el dataset gapminder. Este gráfico mostrará:

Cargar paquetes en R

Code
library(tidyverse) # Manipulacion, limpieza y visualizacion de datos
library(gapminder) # Base de datos
library(DT)        # Tablas bonitas
library(plotly)    # Graficas interactivas
library(viridis)   # Paleta de colores
library(hrbrthemes) # Otros temas

3.1 Selección de datos

En este ejemplo vamos a visualizar la esperanza de vida (lifeExp), la población total del país (pop) y el producto interno bruto per cápita (gdpPercap) por cada pais, empleando la información general del conjunto de datos gapminder proveniente del paquete gapminder en R.

Code
data <- gapminder %>% 
  filter(year=="2007") %>% # seleccionar solo 2007 
  dplyr::select(-year) # Eliminar la columna de year

3.1.1 ¿Qué es un widget?

Un widget es un componente interactivo de una interfaz gráfica. Es una pieza visual que permite a los usuarios interactuar con una aplicación o presentación.

En el contexto de R y especialmente de Plotly, Shiny, o R Markdown/Quarto, un widget es un elemento que se puede:

  • mover, hacer clic, deslizar, seleccionar, o interactuar de alguna forma.

3.2 Visualización gráfica 1

Code
plot1 <- data %>%
  ggplot( aes(gdpPercap, lifeExp, size = pop, color=continent)) +
  geom_point() +
  theme_bw()
# Grafica basica
plot1

Convertir a un gráfico interactivo

La función ggplotly() es parte del paquete plotly en R, y su principal función es convertir gráficos hechos con ggplot2 en gráficos interactivos.

Code
ggplotly(plot1)

¡Y listo! Ahora el gráfico es interactivo.

¿Cuándo conviene usar plotly?
  • Cuando estás explorando datos y quieres ver detalles rápidamente.
  • Cuando presentas resultados a personas no técnicas que quieren “jugar” con los datos.
  • En dashboards hechos con Shiny o presentaciones en R Markdown/Quarto HTML.

3.3 Visualización gráfica 2

Code
# Seleccion de datos
plot2_df <- data %>%
  # Cambiar formatos
  mutate(gdpPercap = round(gdpPercap,0)) %>% # Eliminar decimales
  mutate(pop = round(pop/1000000,2)) %>% # Dejar en milones con dos decimas
  mutate(lifeExp = round(lifeExp,1)) %>% # dejar a una decimal
  # Reordenar esferas por pop
  arrange(desc(pop)) %>%
  mutate(country = as.factor(country)) %>%
  # Preparar etiquetas (tooltip)
  mutate(text = paste("Pais: ", country, "\nPoblación (M): ", 
                      pop, "\nEsperanza de vida: ", lifeExp, "\nGdp per capita: ", gdpPercap, sep="")) 
  
# Grafica basica
plot2 <- plot2_df %>%
  ggplot( aes(x=gdpPercap, y=lifeExp, size = pop, color = continent, text=text)) +
  geom_point(alpha=0.7) +
  scale_size(range = c(1.4, 19), name="Población (M)") +
  scale_color_viridis(discrete=TRUE, guide=FALSE) +
  theme_ipsum() +
  theme(legend.position="none")

plot2

Convertir a plot interactivo

Code
plot2_interactive <- ggplotly(plot2, tooltip="text")
plot2_interactive

Almacenar o guardar la información (widget)

Code
library(htmlwidgets)

saveWidget(plot2_interactive, file= "graphs/ggplotlyBubblechart.html")
En resumen
  • Un widget es cualquier elemento interactivo en una aplicación o presentación.
  • Los gráficos interactivos con Plotly son widgets.

3.4 Visualización gráfica 3

3.4.1 Paso 1: Crear el gráfico con plot_ly()

Code
plot3 <- gapminder %>%
  plot_ly(
    x = ~gdpPercap,         # Eje X: PIB per cápita
    y = ~lifeExp,           # Eje Y: Esperanza de vida
    size = ~pop,            # Tamaño de burbuja: Población
    color = ~continent,     # Color: Continente
    frame = ~year,          # Fotograma para animación: Año
    text = ~country,        # Texto al pasar el cursor: Nombre del país
    hoverinfo = "text",     # Muestra solo el texto personalizado
    type = 'scatter',       # Tipo de gráfico: Dispersión
    mode = 'markers'        # Solo marcadores (sin líneas)
  )

Esto genera un gráfico de burbujas por año, con diferentes colores según el continente y tamaños según la población.

3.4.2 Paso 2: Ajustar el eje X a escala logarítmica

Como los valores del PIB per cápita varían mucho entre países, es mejor mostrar el eje X en escala logarítmica para facilitar la comparación:

Code
plot3_interactive <- plot3 %>% layout(
  xaxis = list(
    type = "log"  # Escala logarítmica en el eje X
  )
)

# Visualizar el gráfico
plot3_interactive

Esto muestra un gráfico animado, donde puedes:

  • Usar los botones para avanzar año por año.
  • Hacer hover sobre un punto para ver el país.
  • Hacer zoom o mover el gráfico con el mouse.

3.5 📝 Recomendaciones:

¿Quieres…? Usa…
Convertir un gráfico ggplot2 a interactivo rápidamente ggplotly()
Crear un gráfico totalmente interactivo desde cero plot_ly()
Hacer animaciones (por año, tiempo, etc.) plot_ly()
Personalizar profundamente la interacción del gráfico plot_ly()

3.6 Referencias