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