Fecha de la ultima revisión: ā€œ2023-22-04ā€

Paquete ggiraph


ĀæPara que se utiliza este paquete?

ggiraph es un paquete R que permite la creación de grĆ”ficos interactivos usando ggplot2. Con ggiraph, uno puede hacer que sus grĆ”ficos ggplot2 sean interactivos agregando información sobre herramientas, zoom, desplazamiento panorĆ”mico y Ć”reas en las que se puede hacer clic (conocidas como ā€œinformación sobre herramientasā€). Este paquete es Ćŗtil para crear visualizaciones que permitan a los usuarios explorar los datos haciendo clic en los elementos del grĆ”fico.

ggiraph es particularmente útil para crear grÔficos interactivos para aplicaciones web, tableros de datos y otros proyectos de visualización de datos interactivos. Al agregar interactividad a sus grÔficos ggplot2, puede proporcionar visualizaciones mÔs atractivas e informativas que permitan a los usuarios explorar los datos con mayor profundidad.

#instalar.paquetes
library(ggplot2)
library(ggiraph)
library(patchwork)
library(dplyr)

ĀæComo se utiliza el paquete?

# Crear un data frame con x, y, y columnas de etiquetas
data <- data.frame(x = rnorm(50), y = rnorm(50), label = LETTERS[1:50])

# Crear un ggplot2 "scatter plot" con la información
p <- ggplot(data, aes(x = x, y = y, data_id = label, tooltip = label)) + 
  geom_point_interactive()

# Hacer el "plot" interactivo con ggiraph
ggiraph(code = print(p))

En este ejemplo, geom_point_interactive() se usa para crear los puntos interactivos y el data_id se utiliza para especificar la columna de ID que se usarÔ para esas funciones interactivas. El argumento de información sobre herramientas especifica la columna que se utilizarÔ para el texto.


Scatterplots Interactivos

Primero comenzaremos cargando el dataset ā€œmpgā€. En primer lugar se comenzarĆ” realizando un scatterplot normal comparando la variable displacement - displā€ y ā€œhighway miles per gallon - hwyā€. Luego de crear la grĆ”fica se utilizarĆ” la función ggiraph.

# Cargar el mpg dataset
data(mpg)

# Crear un "scatter plot" con las herramientas de información interactivos  
mpgp <- ggplot(mpg, aes(x = displ, y = hwy, data_id = model, tooltip = paste("Make: ", manufacturer, "<br>Model: ", model, "<br>City MPG: ", cty, "<br>Highway MPG: ", hwy))) +
  geom_point_interactive()

# Crear el plot interactivo con ggiraph
ggiraph(code = print(mpgp))

Al este paquete utilizar ggplot2 como base podemos igualmente añadir elementos como: a. titulo b. axis tittles c. colores para la grÔfica.

#
mpgp2 <- ggplot(mpg, aes(x = displ, y = hwy, data_id = model, tooltip = paste("Make: ", manufacturer, "<br>Model: ", model, "<br>City MPG: ", cty, "<br>Highway MPG: ", hwy, "<br>Class: ", class))) +
  geom_point_interactive(aes(color = manufacturer)) +
  labs(title = "Engine Displacement vs. Highway MPG", x = "Engine Displacement (Liters)", y = "Highway MPG") +
  scale_color_discrete(name = "Manufacturer")

# Interactivo con ggiraph
ggiraph(code = print(mpgp2))

Conectando dos grƔficos


Igual se puede utilizar el paquete para conectar dos grÔficos distintos de la siguiente manera. Aquí se estarÔ usando los datos sobre frequencia de vacunación de personas en los Estados Unidos. Los datos estan disponible en el siguiente website:

https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/us_state_vaccinations.csv

#Importe de Datos

library(readr)
us_state_vaccinations <- read_csv("us_state_vaccinations.csv")
## Rows: 52836 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr   (1): location
## dbl  (14): total_vaccinations, total_distributed, people_vaccinated, people_...
## date  (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
DataVaxCompleto = us_state_vaccinations

DataVaxCompleto$location[DataVaxCompleto$location == "New York State"] = "New York"

#Remover todo dato que no incluya los Estados

#Se crea un vector con los datos que no se quieren usar

No_estados = c("American Samoa", "Bureau of Prisons", "Dept of Defense", "Federated States of Micronesia", "Guam", "Indian Health Svc", "Long Term Care", "Marshall Islands", "Northern Mariana Islands", "Republic of Palau", "United States", "Veterans Health", "Virgin Islands", "Puerto Rico")

# Se remueve los datos no necesarios y se redondea el porciento a un decimal

#Se Cambio la Columna de Location a "State"

BarGraphData = DataVaxCompleto %>%
  filter(date == max(date), !(location %in% No_estados)) %>%
  mutate(
  PctFullyVaccinated = round(people_fully_vaccinated_per_hundred, 1)) %>%
  select(State = location, PctFullyVaccinated)

ggplot bƔsico:

Creación del grÔfico con los cambios necesarios para que este sea mas preciso.

bar_graph = ggplot(BarGraphData,
                   aes(x = reorder(State, PctFullyVaccinated),
                       y = PctFullyVaccinated))+
  geom_col(color = "black", fill ="#B526D1", size = 0.5)+
  theme(axis.text=element_text(size = 10))+
  labs(title = "Percent of Fully Vaccinated",
       subtitle = "Data from Our World in Data")+
  theme(axis.text.y = element_text(size = 4))+
  ylab("")+
  xlab("")+
  coord_flip()

bar_graph


Utilizando ggiraph

Como este paquete nos permite tener un grĆ”fico interactico, estamos aƱadiendo la función de ā€œtooltipā€ para que cuando pasemos el mouse por una barra este nos diga el porcentaje especĆ­fico de ese estado y el nombre del estado para permitir que toda persona puede proporcionar una mejor experiencia al lector, aumente su atención y la comprensión del contenido que la persona este viendo.

#Se utiliza la funcion tooltip_text para indicar que queremos utilizar la variable "State" y la variable "PctFullyVaccinated"

BarGraphData = BarGraphData %>%
  mutate(
    tooltip_text = paste0(toupper(State), "\n", PctFullyVaccinated, "%")
  )

latest_vax_graph <- ggplot(BarGraphData,
aes(x = reorder (State, PctFullyVaccinated),
y = PctFullyVaccinated,
tooltip = tooltip_text, data_id = State
)) +
geom_col_interactive(color = "black", fill="#B526D1", size = 0.4) +
theme(axis.text=element_text (size = 6)) +
labs(title = "Percent Fully
     Vaccinated",
subtitle = "Data from Our World in Data"
)+
  ylab("")+
  xlab("")+
  coord_flip()

#latest_vax_graph

girafe(ggobj = latest_vax_graph)

Creando una grƔfica de una fecha especƭfica

Se estarÔ selecionando una fecha específica para crear otra grÔfica con los porcentajes de vacunación total y comparalos con la fecha seleccionada.

BarGraphData_June20 = DataVaxCompleto %>%
  filter(date == "2021-06-20", !(location %in% No_estados)) %>%
  arrange(people_fully_vaccinated_per_hundred) %>%
  mutate(
  PctFullyVaccinated = round(people_fully_vaccinated_per_hundred, 1),
  tooltip_text = paste0(toupper(location), "\n", PctFullyVaccinated, "%"))%>%
  select(State = location, PctFullyVaccinated, tooltip_text)

DateJuneGraph = ggplot(BarGraphData_June20,
                      aes(x = reorder (State, PctFullyVaccinated),
y = PctFullyVaccinated,
tooltip = tooltip_text, data_id = State
)) +
geom_col_interactive(color = "black", fill="#B526D1", size = 0.4) +
theme(axis.text=element_text (size = 6)) +
labs(title = "Percent Fully Vaccinated
     in June 2021",
subtitle = "Data from Our World in Data"
)+
  ylab("")+
  xlab("")+
  coord_flip()

girafe(ggobj = DateJuneGraph)
## Warning: Removed 1 rows containing missing values (position_stack).

Uniendo ambos grƔficos

Utilizando el paquete ā€œpatchworkā€ podemos unir los dos grĆ”ficos para poder comparar la diferencia en las fechas con sus porcentajes de manera rĆ”pida y directa ya que este seƱala los los dos estados a la misma vez.

girafe(code = print(DateJuneGraph + latest_vax_graph)) %>%
  girafe_options(opts_hover(css = "fill:purple;"))
## Warning: Removed 1 rows containing missing values (position_stack).

Por mas información de como utilizar ggiraph, ver este enlace:

https://exts.ggplot2.tidyverse.org/ggiraph.html