La librería ggiraph permite crear gráficos dinámicos e interactivos. Usaremos este recurso cuando queramos que la persona que visualiza la gráfica tenga acceso a más información (al poner el cursor sobre un punto o sobre una etiqueta), incluso es posible colocar un enlace a una dirección web. También es posible seleccionar qué elementos son visibles en la gráfica. Podemos generar una salida html o usarla con RMarkdown, Shiny…
Primero carguemos las librerías a utilizar
library(ggplot2)
library(ggiraph)
library(ggpubr)
Ahora generamos datos
n=100
c=sample(c(1,2,3,4,5),n,replace=TRUE)
f=sample(c(0,1),n,replace=TRUE)
# Generamos n valores distribuidos uniformemente entre 0 y 10
v1=runif(n,0,10)
# Generamos los valores de v2 como una transformación lineal de v1,
# dependiendo de los factores c y f
v2=c*v1+3+rnorm(n,3*f,1)
# Creamos un data.frame con las variables v1, v2, c y f
datos <- data.frame(x=v1,y=v2,clase=as.factor(c),f=as.factor(f))
Montemos la gráfica con ggplot y luego aplicamos la función
girafe
p<-ggplot(datos)+
aes(v1,v2,color=clase)+
geom_point_interactive(aes(tooltip=clase,data_id = clase),
size=3,hover_nearest = TRUE)
girafe(ggobj=p)
Si queremos que se muestre una etiqueta sobre cada punto, debemos
usar el comando tooltip y especificar qué etiqueta se
muestra, así como data_id, que indica qué variable del
dataset estamos usando para indicar qué puntos se muestran. Por ejemplo,
si queremos mostrar la clase y también los valores de cada punto,
podemos escribir
p<-ggplot(datos)+
aes(v1,v2,color=clase)+
geom_point_interactive(aes(tooltip=paste0(clase,": (",round(v1,2),
" , ",round(v2,2), ")"),
data_id = clase), size=3,hover_nearest = TRUE)
girafe(ggobj=p)
Si queremos que lo que sea interactivo sean las rectas de regresión,
y que nos escriba la ecuación, lo mejor es calcularlas previamente y con
el tooltip podemos escribirla.
coef1<-numeric(5)
coef2<-numeric(5)
for (i in 1:5) {
coef1[i]=round(as.numeric(coef(lm(v2[c==i]~v1[c==i]))[1]),2)
coef2[i]=round(as.numeric(coef(lm(v2[c==i]~v1[c==i]))[2]),2)
}
p<-ggplot(datos)+
aes(x,y,shape=clase,color=clase)+
geom_point()+
geom_smooth_interactive(formula=y~x, method="lm",level=0.95,
aes(tooltip=paste("R",clase,": y=",coef1[clase]," + ",coef2[clase]," x"),
data_id=clase))
girafe(ggobj=p)
En caso de querer exportar esta gráfica a html, lo más cómodo es ejecutarlo en la consola y usar el menú Export del Viewer de RStudio.
Otro ejemplo de gráfica. En este caso, lo que hacemos interactivos son los puntos.
p<-ggplot(datos)+
aes(x=clase,y=y)+
geom_boxplot(aes(color=clase))+
geom_jitter_interactive(position = position_jitter(width = .1),
color="chocolate",aes(tooltip=paste0("C",clase, ": ",round(v2,2)),data_id=clase))
girafe(ggobj=p)
Con las gráficas de líneas, puede también ser interesante introducir la interactividad.
etiquetas<-c("Clase A","Clase B","Clase C","Clase D","Clase E")
g<-ggplot(datos)+
aes(x,y,color=clase)+
geom_line_interactive(aes(color=clase,tooltip=etiquetas[clase],data_id=clase))+
scale_colour_discrete(name="Tipo",labels=etiquetas)+
labs(x="Tiempo",y="Variable a estudiar")
girafe(ggobj=g)
Podemos fijar algunas opciones interesantes, como el tamaño de la gráfica, el color, posición y tamaño de las etiquetas, así como poner un botón para zoom y una barra de herramientas.
girafe(ggobj=g,options=list(opts_sizing(rescale=TRUE,width=0.75),
opts_tooltip(offx=5,offy=5,
css = "padding:3px;background-color:grey;color:yellow;"),
opts_zoom(min=1,max=2),
opts_toolbar(position="top",saveaspng=TRUE)))