- Combinación de múltiples gráficas
- Representación de relaciones
- Comparación de diferentes alternativas atendiendo a varios criterios
- Representación gráfica de funciones
- Geometría con gráficos de tortuga
- Almacenamiento de las gráficas
Las posibilidades gráficas en R son muy extensas, habiendo disponibles varias decenas de paquetes que, como ggplot
, ofrecen un extenso conjunto de comandos para elaborarlas. A continuación aprenderemos a usar algunas de ellas.
Combinación de múltiples gráficas
La posibilidad de combinar en una misma imagen múltiples gráficas facilita la comparación visual rápida, por ejemplo entre distintas variables.
plot(iris[ ,-5], col = iris$Species)
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() + facet_wrap(~Species)
grafica <- ggplot(diamonds, aes(price)) +
geom_histogram(bins=20, color="black", fill="yellow") +
scale_x_log10()
grafica + facet_wrap(~cut, scales = "free_y")
grafica + facet_grid(color~cut, scales = "free_y")
Representación de relaciones
Las gráficas circulares conocidas como tipo circos facilitan la visualización de porcentajes y relaciones entre variables:
library(circlize) # Cargamos el paquete necesario para esta gráfica
HairEyeColor # Examinamos el dataset HairEyeColor
## , , Sex = Male
##
## Eye
## Hair Brown Blue Hazel Green
## Black 32 11 10 3
## Brown 53 50 25 15
## Red 10 10 7 7
## Blond 3 30 5 8
##
## , , Sex = Female
##
## Eye
## Hair Brown Blue Hazel Green
## Black 36 9 5 2
## Brown 66 34 29 14
## Red 16 7 7 7
## Blond 4 64 5 8
# Podemos traducir las denominaciones
attr(HairEyeColor,"dimnames")$Eye <- c("Marrones", "Azules", "Avellana", "Verdes")
attr(HairEyeColor,"dimnames")$Hair <- c("Negro", "Castaño", "Pelirrojo", "Rubio")
chordDiagram(HairEyeColor[,,2])
Comparación de diferentes alternativas atendiendo a varios criterios
En ocasiones se cuenta con diferentes vías para solucionar un mismo problema y la calidad de cada una de ellas puede evaluarse con distintos criterios, lo cual dificulta el análisis y selección de la mejor opción. La gráfica de tipo radar o spider está pensada para estos casos.
library('fmsb') # Cargamos el paquete donde está el comando
## Warning: package 'fmsb' was built under R version 3.2.5
dat <- data.frame( # Simulamos tres métodos con cinco criterios de evaluación
Prec = runif(3, 0, 1),
Accu = runif(3, 0, 1),
Reca = runif(3, 0, 1),
AUC = runif(3, 0, 1),
Kapp = runif(3, 0, 1)
)
rownames(dat) <- c("SVM", "C4.5", "MLP")
radarchart(dat, maxmin = FALSE) # Dibujamos la gráfica
# Agregamos una leyenda para indicar los criterios
legend("bottomleft", rownames(dat),
col = c('black', 'green', 'red'),
lty = 1:3, lwd = 2, ncol = 1)
Alternativamente, también podría utilizarse una gráfica de tipo heatmap. Esta es una matriz en la que se representan todos los posibles valores, asignando un color a cada celdilla en función del valor correspondiente:
heatmap(as.matrix(dat), scale="column", Colv=NA, Rowv=NA)
Representación gráfica de funciones
R es capaz de representar cualquier función matemática, ya sea una función incluida en R o cualquier otra que podamos necesitar siempre que la definamos de forma adecuada. Los siguientes son algunos ejemplos:
# Curva a partir de funciones existentes (sin y cos)
curve(sin, from = -4, to = 4, col = 'blue', lty = 'dotted', lwd = 2,
ylab='sin(x) vs cos(x)', xname = "Valores de entrada")
curve(cos, from = -4, to = 4, col = 'cyan', lty = 'dashed', lwd = 2, add = TRUE)
legend("topleft", c("sin(x)", "cos(x)"), col = c('blue', 'cyan'),
lty = c('dotted','dashed'), lwd = 2, ncol = 2)
# Curva del valor absoluto
curve(abs, from = -10, to = 10)
# Curvas a partir de polinomios
curve(x^2 - x, lty = 3, lwd = 2, from = -10, to = 10)
curve(x^3 - x^2 + 1, lty = 2, lwd = 2, from = -10, to = 10, add = TRUE)
# A partir de una función parámetrica definida por el usuario
heart <- function(t) {
x <- 16 * sin(t)^3
y <- 13 * cos(t) - 5 * cos(2*t) - 2 * cos(3*t) - cos(4*t)
c(x,y)
}
mpoints <- matrix(sapply(seq(0,2*pi,0.1), heart), ncol = 2, byrow = TRUE)
plot(mpoints)
lines(mpoints)
Geometría con gráficos de tortuga
Incluso podemos generar gráficos con geometrías definidas algorítmicamente acorde con el lenguaje Logo, conocidos como gráficos de tortuga:
library('TurtleGraphics')
## Warning: package 'TurtleGraphics' was built under R version 3.2.5
## Loading required package: grid
turtle_init()
turtle_do({
for(j in 1:45) {
for(i in 1:6) {
turtle_forward(20)
turtle_right(360/6)
}
turtle_right(360/45)
}
})
Almacenamiento de las gráficas
Tras generar una gráfica lo habitual es que nos interese guardarla en algún formato a fin de, posteriormente, imprimirla o incluirla en algún estudio. El panel Plots
de RStudio, en el que han ido apareciendo las gráficas de los ejercicios, cuenta con un menú Export
desde el que podemos guardar la gráfica actual tanto en formato PDF como en distintos formatos gráficos.
La mayoría de formatos gráficos son estáticos, por lo que únicamente permiten mostrar una configuración concreta de la información representada. Algunos de ellos, sin embargo, contemplan el uso de animaciones. Con el comando saveGIF()
del paquete animation
podemos generar una gráfica animada, mostrando cómo cambia la función representada en función de algún parámetro de entrada. En lugar de saveGIF()
podemos utilizar el comando saveVideo()
para generar un vídeo MPEG.
library(animation)
saveGIF({
for(lim in seq(-3.14,3.14,by=0.1))
curve(sin, from=lim, to=lim + 9)
}, movie.name="animacion.gif", interval=0.2, ani.width=640, ani.height=640)
## Executing:
## ""convert" -loop 0 -delay 20 Rplot1.png Rplot2.png Rplot3.png
## Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png
## Rplot9.png Rplot10.png Rplot11.png Rplot12.png Rplot13.png
## Rplot14.png Rplot15.png Rplot16.png Rplot17.png Rplot18.png
## Rplot19.png Rplot20.png Rplot21.png Rplot22.png Rplot23.png
## Rplot24.png Rplot25.png Rplot26.png Rplot27.png Rplot28.png
## Rplot29.png Rplot30.png Rplot31.png Rplot32.png Rplot33.png
## Rplot34.png Rplot35.png Rplot36.png Rplot37.png Rplot38.png
## Rplot39.png Rplot40.png Rplot41.png Rplot42.png Rplot43.png
## Rplot44.png Rplot45.png Rplot46.png Rplot47.png Rplot48.png
## Rplot49.png Rplot50.png Rplot51.png Rplot52.png Rplot53.png
## Rplot54.png Rplot55.png Rplot56.png Rplot57.png Rplot58.png
## Rplot59.png Rplot60.png Rplot61.png Rplot62.png Rplot63.png
## "animacion.gif""
## Output at: animacion.gif
## [1] TRUE