Fecha de la ultima revisión: ā2023-22-04ā
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)
# 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.
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))
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:
#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)
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
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)
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).
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: