13 Paquetes gráficos

13.1 Los paquetes con paletas

13.1.1 RColorBrewer

El paquete RColorBrewer es un paquete de referencia porque contiene paletas adicionales a las disponibles en la versión básica de R. Una vez que el paquete está instalado, solo llamamos a las paletas para utilizarlas. Aquí están las paletas disponibles y un ejemplo de uso.

pkgCheck <- function(x){ 
    if (!require(x, character.only = TRUE)){
        install.packages(x, dependencies = TRUE)
        if(!require(x, character.only = TRUE)) {
            stop()
        }
    }
}
pkgCheck("RColorBrewer")
## Loading required package: RColorBrewer
display.brewer.all()

boxplot(matrix(rnorm(1000), ncol = 10), 
  col = brewer.pal(10, "Paired"), axes = FALSE)

13.1.2 palettesForR

El paquete palettesForR es otro paquete que contiene paletas listas para usar de los proyectos ‘Gimp’ y ‘Inkscape’. Una vez que el paquete está instalado, solo llamamos a las paletas para utilizarlas. Las muchas paletas disponibles se enumeran en la ayuda del paquete (hay 48 paletas). Aquí hay un ejemplo de uso.

pkgCheck <- function(x){ 
    if (!require(x, character.only = TRUE)){
        install.packages(x, dependencies = TRUE)
        if(!require(x, character.only = TRUE)) {
            stop()
        }
    }
}
pkgCheck("palettesForR")
## Loading required package: palettesForR
showPalette(Echo_gpl)

groupTest <- sample(1:3, size = 100, replace = TRUE) 
valueTest <- sample(1:7, size = 100, replace = TRUE)
tableTest <- table(groupTest, valueTest)
barplot(tableTest, 
  col = Echo_gpl, axes = FALSE, beside = TRUE)

groupTest <- sample(1:3, size = 100, replace = TRUE) 
valueTest <- sample(1:7, size = 100, replace = TRUE)
tableTest <- table(groupTest, valueTest)
barplot(tableTest, 
  col = Tango_gpl, axes = FALSE, beside = TRUE)

13.1.3 Otros paquetes

Hay muchos paquetes que contienen paletas. Por ejemplo :

13.2 ggplot2 package

El paquete ggplot2 es una alternativa a las funciones básicas de R para realizar gráficos. Se basa en “La Gramática de Gráficos” Leland Wilkinson y permite gráficos en capas, por lo general con un resultado superior si consideramos el aspecto estético en comparacion con las funciones básicas de R. Si para explorar un conjunto de datos ggplot2 es a veces más potente, nuestros gráficos nunca vienen solas y se acompañan de análisis estadísticos que a menudo exigen un trabajo minucioso sobre la gestión de datos. Una vez que nuestras hipótesis de trabajo estan probadas estadísticamente, resulta fácil realizar gráficos cual que sea su nivel de complejidad (con las funciones básicas o con ggplot2). Además veremos en el siguiente capítulo que desde la gráfica a la figura en el artículo científico, hay una serie de tratamientos a realizar y el manejo de los parámetros estéticos se puede hacer de forma independiente de R. Así que ggplot2 es un paquete interesante porque ofrece una alternativa con una filosofía diferente en la construcción de gráficos, pero no reemplaza lo que hemos aprendido hasta ahora. En la práctica podemos utilizar uno u otro en función de los datos y de las manipulaciones que queremos hacer.

Para volver a ggplot2, empezamos con un ejemplo con los datos iris.

pkgCheck <- function(x){ 
    if (!require(x, character.only = TRUE)){
        install.packages(x, dependencies = TRUE)
        if(!require(x, character.only = TRUE)) {
            stop()
        }
    }
}
pkgCheck("ggplot2")
## Loading required package: ggplot2
data(iris)
# ggplot2
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width))
p + geom_point() + ggtitle("ggplot2")

# base
plot(x = iris$Sepal.Length, y = iris$Sepal.Width, 
  main = "base", pch = 16)

Ahora separemos la información según las especies de flores.

# ggplot2
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
p + geom_point() + ggtitle("ggplot2")

# base
plot(x = iris$Sepal.Length, y = iris$Sepal.Width, 
  main = "base", pch = 16, col = iris$Species)

Parece haber una relación entre el ancho y el largo de los sépalos por especie.

# linear regressions
lmFits <- lapply(1:3, function(i){
  fitSp1 <- lm(iris$Sepal.Width[as.numeric(iris$Species) == i] ~ 
    iris$Sepal.Length[as.numeric(iris$Species) == i])
  fStat1 <- summary(fitSp1)$fstatistic
  rSq1 <- summary(fitSp1)$r.squared
  pVal1 <- summary(fitSp1)$coefficients[2, 4]
  stat1 <- paste0("F=", round(fStat1[1], digits = 2), 
    "; DF=", fStat1[2], "/", fStat1[3], "; r-sq=", round(rSq1, digits = 2), 
    "; p-val=", round(pVal1, digits = 6))
  return(list(fitSp1, stat1))
})
# ggplot2
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
p <- p + geom_point() + ggtitle("ggplot2") + stat_smooth(method = "lm", se = FALSE)
p <- p + annotate(geom = "text", x = 6, y = 2.250, label = lmFits[[1]][[2]], colour = 2)
p <- p + annotate(geom = "text", x = 6, y = 2.125, label = lmFits[[2]][[2]], colour = 3)
p <- p + annotate(geom = "text", x = 6, y = 2.000, label = lmFits[[3]][[2]], colour = 4)
p

# base
plot(x = iris$Sepal.Length, y = iris$Sepal.Width, 
  main = "base", pch = 16, col = iris$Species)
abline(lmFits[[1]][[1]], col = 1)
abline(lmFits[[2]][[1]], col = 2)
abline(lmFits[[3]][[1]], col = 3)
text(x = 5.5, y = 2.2, labels = lmFits[[1]][[2]], pos = 4)
text(x = 5.5, y = 2.1, labels = lmFits[[2]][[2]], pos = 4, col = 2)
text(x = 5.5, y = 2.0, labels = lmFits[[3]][[2]], pos = 4, col = 3)

Podemos ver en estos ejemplos que los gráficos con ggplot2 comienzan con una llamada a la función ggplot(), en la cual el primer argumento datos coincide con nuestros datos (generalmente un data.frame), y El segundo argumento aes() es la información que queremos usar. Por convención, esta información se almacena en un objeto p. Luego agregaremos capas adicionales usando +.

En las capas podemos agregar aspectos geométricos (el tipo de gráfico, por ejemplo, geom_point()), estadísticas (por ejemplo, stat_smooth()), anotaciones (por ejemplo, annotate()), y otras cosas relacionadas con los ejes, los colores, … La documentación completa se puede consultar en la dirección https://ggplot2.tidyverse.org/ (hoja de resumen: https://github.com/rstudio/cheatsheets/blob/master/data-visualization-2.1.pdf). Muchas extensiones a ggplot2 están disponibles en http://www.ggplot2-exts.org/gallery/.

13.3 Gráficos interactivos y dinámicos con Plotly

Plotly es un paquete para gráficos interactivos y dinámicos. Esto puede ser particularmente útil para los resultados que se difunden a través de Internet. El paquete se instala como cualquier otro con install.packages("plotly"). El paquete es gratuito y de código abierto.

Este ejemplo se ha copiado del libro de Carson Sievert (https://plotly-book.cpsievert.me). El código usado para hacer este gráfico está licenciado bajo la licencia de Estados Unidos Creative Commons Attribution-NonCommercial-NoDerivs 3.0 (Carson Sievert; https://creativecommons.org/licenses/by-nc-nd/3.0/us/).

13.4 Conclusión

Este capítulo nos permitió ver otras opciones gráficas y, en particular, los paquetes ggplot2 y plotly. Existen libros específicos (en inglés) que cubren todos los aspectos de estos paquetes, aquí el objetivo es saber que existen estas opciones para usarlos si es necesario. Los sitios web “Data to Viz” y “r-graph gallery” (https://www.data-to-viz.com; https://www.r-graph-gallery.com/) son buenos recursos para tener ideas de las posibilidades que ofrece R en cuanto a representaciones gráficas. El siguiente capítulo analiza los procesos necesarios para transformar un gráfico R en una figura publicable en un artículo científico. Hasta muy pronto !