El paquete plotly permite la construcción de gráficas de alta calidad, incorporando la interactividad en los gráficos, mostrando botones para hacer zoom en una parte de la gráfica, redefinir los ejes X e Y, mostrar la información que contiene cada dato, mostrar datos filtrando por uno o varios factores… Además, son gráficos de tipo “responsive”: se adaptan a las dimensiones de la ventana en que aparecen.

La forma de construir los gráficos es:

  1. Directamente, cargando la librería y usando el comando plot_ly
# cargamos las librerías
library(plotly)
library(ggplot2)

# cargamos los datos
library(readxl)
#Importemos el conjunto de datos
data <- read_excel("RiesgoPobrezaTasa.xls")
#un factor
plot_ly(data,x=~riesgo1,y=~riesgo2,type="scatter",mode = "markers+text",color=~ccaa)

En esta gráfica, podemos:

  1. Guardar el gráfico como imagen png
  2. Hacer zoom en una zona concreta
  3. Pan: mover la gráfica
  4. Box select: marcar una zona concreta
  5. Lasso select: marcar una zona, en forma lasso
  6. Hacer Zoom in
  7. Hacer zoom out
  8. Autoscale
  9. Reset axes: volver al inicio
  10. Con la casilla hover podemos situarnos sobre los puntos y obtenemos la información de los mismos.
  11. Al situarnos sobre los puntos, obtenemos información de los datos más cercanos

Una cosa también interesante es que en el menú de la derecha (por comunidades), podemos pinchar en el circulito de color y seleccionar o quitar las comunidades que se muestran.

También podemos introducir una combinación de dos factores.

plot_ly(data,x=~riesgo1,y=~riesgo2,type="scatter",mode = "markers+text",color=~ccaa,symbol = ~agno)

Poniendo el cursor sobre un dato, obtenemos la información de ese dato.

Podemos incorporar una animación, con el comando frame.

plot_ly(data,x=~riesgo1,y=~riesgo2,type="scatter",color=~ccaa,frame = ~agno)
  1. Otra opción para aplicar plotly es usar un gráfico ya generado por ggplot.
###Generamos 50 datos en torno al (3,-4), 50 datos en torno a la N(-2,-4) y los últimos 50
#en torno a (0,0)
x<-matrix(rnorm(300), ncol=2)
x[1:50,1]<-x[1:50,1]+3
x[1:50,2]<-x[1:50,2]-4
x[51:100,1]<-x[51:100,1]-2
x[51:100,2]<-x[51:100,2]-4

#aplicamos el método de k-medias para identificar clusters (agrupaciones de puntos)
km2<-kmeans(x,centers=2,nstart=20) ##forzando 2 clusters
km3<-kmeans(x,centers=3,nstart=20) ##forzando 3 clusters
##definimos el data.frame a usar, las variables km2$cluster y km3$cluster nos dicen en 
#qué cluster se encuentra cada dato (toman los valores 1,2 o 3)
datos<-data.frame(x,as.factor(km2$cluster),as.factor(km3$cluster))

g<-ggplot(datos)+
  aes(x=X1,y=X2,colour=as.factor(km3$cluster),shape=as.factor(km2$cluster))+
  geom_point()+
  labs(title="Clusters",x="x1",y="x2")+
  scale_colour_discrete(name="km3 por colores")+
  scale_shape_discrete(name="km2 por formas")

g

##aunque vemos que plotly nos "descoloca" las etiquetas: clasifica cada elemento 
#en los dos clusters. Los puntos verdes (2,1) son los que están en el cluster 1 para la #clasificación hecha por km3 y el el 1 para la clasificaión km2
ggplotly(g)

Para guardar el gráfico, podemos usar el botón Export del menú Viewer que aparece cuando ejecutamos el código. Nos permite exportar como imagen, copiar al portapeles o guardar como un archivo html, lo cual nos permitirá compartirlo, para que otras personas puedan usar la interactividad del gráfico, que es el objetivo principal de plotly.

Muy interesante es el uso de plotly para la visualización de datos en 3 dimensiones.

Podemos simplemente pintar una función

x <- seq(-20, 20, length.out = 51)
y <- x
f<- function(x,y) 
{
  r=sqrt(x^2+y^2)
  sin(r)/r
}
z <- outer(x, y, f)
fig <- plot_ly(z=~z)
fig <- fig %>% add_surface()

fig

Y añadir algún detalle más

fig <- plot_ly(z = ~z) %>% add_surface(
  contours = list(
    z = list(
      show=TRUE,
      usecolormap=TRUE,
      highlightcolor="#ff0000",
      project=list(z=TRUE)
    )
  )
)
fig <- fig %>% layout(
  scene = list(
    camera=list(
      eye = list(x=1.87, y=0.88, z=-0.64)
    )
  )
)

fig

Usando los datos de volcano, que vienen incorporados en la base de datos de R:

fig <- plot_ly(z = ~volcano)
fig <- fig %>% add_surface()

fig

Un poco más elaborado.

fig <- plot_ly(z = ~volcano) %>% add_surface(
  contours = list(
    z = list(
      show=TRUE,
      usecolormap=TRUE,
      highlightcolor="#ff0000",
      project=list(z=TRUE)
    )
  )
)
fig <- fig %>% layout(
  scene = list(
    camera=list(
      eye = list(x=1.87, y=0.88, z=-0.64)
    )
  )
)

fig