R incluye muchas y variadas funciones para hacer gráficos. El sistema permite desde gráficos muy simples a figuras de calidad para incluir en artículos y libros.
Aquí sólo examinaremos la superficie. Si quieres más detalles para controlar todoas los aspectos de tus gráficos échale un vistazo al paquete ggplot2 o lattice. Hay un blog estupendo en el que, a través de 12 post, se presentan gráficos en uno y otro paquete, dicutiendo las bondades y debilidades de cada uno de ellos. Si te conformas con un buen conjunto de ejemplos simples, teclea en la consola demo(graphics)
.
plot
Si escribimos plot(x,y)
donde \( x \) e
\( y \) son vectores con \( n \) coordenadas, entonces R representa
el gráfico de dispersión con los puntos de coordenadas \( (x_i,y_i) \). Este comando incluye de forma predefinida una elección automática de ejes,
escalas, etiquetas de los ejes, densidad de las líneas, etc., que
pueden ser modificados añadiendo parámetros gráficos al comando y que pueden visualizarse con help(par)
.
x <- runif(50, 0, 4)
y <- runif(50, 0, 4)
plot(x, y, main = "Título principal", sub = "subtítulo", xlab = "eje x", ylab = "eje y",
xlim = c(0, 5), ylim = c(0, 5))
plot
z <- cbind(x, y)
plot(z)
plot(y ~ x)
plot(log(y + 1) ~ x) # transformación de y
plot(x, y, type = "p")
plot(x, y, type = "l")
plot(x, y, type = "b")
plot(c(1, 5), c(1, 5))
legend(1, 4, c("uno", "dos", "tres"), lty = 1:3, col = c("red", "blue", "green"),
pch = 15:17, cex = 2)
Con text
podemos representar caracteres de texto directamente:
sexo <- c(rep("v", 20), rep("m", 30))
plot(x, y, type = "n")
text(x, y, labels = sexo)
points(x, y, pch = 3, col = "red")
Tipos de puntos.
plot(c(1, 10), c(1, 3), type = "n", axes = FALSE, xlab = "", ylab = "")
points(1:10, rep(1, 10), pch = 1:10, cex = 2, col = "blue")
points(1:10, rep(2, 10), pch = 11:20, cex = 2, col = "red")
points(1:10, rep(3, 10), pch = 21:30, cex = 2, col = "blue", bg = "yellow")
plot(c(0, 10), c(0, 10), type = "n", xlab = "", ylab = "")
for (i in 1:10) {
abline(0, i/5, lty = i, lwd = 2)
}
lty
permite especificaciones más complejas (longitud de los segmentos que son alternativamente dibujados y no dibujados). El parámetro par
controla muchos parámetros gráficos. Por ejemplo, cex
puede referirse a los labels (cex.lab
), otro, cex.axis
, a la anotación de los ejes, etc. Hay muchos más colores. Ver palette
, colors
.
La función identify
\( (x,y,\textit{etiquetas}) \) identifica los puntos con el ratón y escribe la correspondiente etiqueta.
x <- 1:10
y <- sample(1:10)
nombres <- paste("punto", x, ".", y, sep = "")
plot(x, y)
identify(x, y, labels = nombres)
locator()
devuelve las coordenadas de los puntos.
plot(x, y)
locator()
text(locator(1), "el marcado", adj = 0)
Empezamos con par(mfrow=c(
filas,columnas))
antes del comando plot
.
par(mfrow = c(2, 2))
plot(rnorm(10))
plot(runif(5), rnorm(5))
plot(runif(10))
plot(rnorm(10), rnorm(10))
Podemos mostrar muchos gráficos en el mismo dispositivo gráfico. La
función más flexible y sofisticada es split.screen
, bien explicada
en R para principiantes, secc. 4.1.2 (p. 30).
Un diagrama de dispersión múltiple:
X <- matrix(rnorm(1000), ncol = 5)
colnames(X) <- c("a", "id", "edad", "loc", "weight")
pairs(X)
Gráficos condicionados (revelan interacciones):
Y <- as.data.frame(X)
Y$sexo <- as.factor(c(rep("Macho", 80), rep("Hembra", 120)))
coplot(weight ~ edad | sexo, data = Y)
coplot(weight ~ edad | loc, data = Y)
coplot(weight ~ edad | loc * sexo, data = Y)
La librería lattice
permite lo mismo, y mucho más, que coplot
. Ver secc. 4.6 de R para principiantes. Échale un vistazo a esta página graphics-side-by-side para realizar gráficos sofisticados en tus investigaciones.
Los diagramas de caja son muy útiles para ver rápidamente las principales características de una variable cuantitativa, o comparar entre variables.
attach(Y)
boxplot(weight)
plot(sexo, weight)
detach()
boxplot(weight ~ sexo, data = Y, col = c("red", "blue"))
La función boxplot
tiene muchas opciones; se puede modificar el
aspecto, mostrarlos horizontalmente, en una matriz de boxplots, etc.
Véase la ayuda ?boxplot
.
Los datos cuantitativos discretos pueden ser difíciles de ver bien.
Podemos añadir un poco de ruido con el comando jitter
.
dc1 <- sample(1:5, 500, replace = TRUE)
dc2 <- dc1 + sample(-2:2, 500, replace = TRUE, prob = c(1, 2, 3, 2, 1)/9)
plot(dc1, dc2)
plot(jitter(dc1), jitter(dc2))
Podemos añadir muchos elementos a un gráfico, además de leyendas y líneas rectas.
x <- rnorm(50)
y <- rnorm(50)
plot(x, y)
lines(lowess(x, y), lty = 2)
plot(x, y)
abline(lm(y ~ x), lty = 3)
Podemos añadir otros elementos con panel functions en otras funciones (como pairs
, lattice
, etc).
Podemos modificar márgenes exteriores de figuras y entre figuras (véase ?par
y búsquense oma
, omi
, mar
, mai
; ejemplos en An introduction to R, secc. 12.5.3 y 12.5.4.
También gráficos 3D: persp
, image
, contour
; histogramas:
hist
; gráficos de barras: barplot
; gráficos de comparación de
cuantiles, usados para comparar la distribución de dos variables, o
la disribución de unos datos frente a un estándar (ej., distribución
normal): qqplot
, qqnorm
y, en paquete car
, qq.plot
.
Si queremos usar notación matemática usaremos plotmath
y expresiones de texto arbitrariamente complejas en las coordenadas expression
x <- seq(-pi, pi, len = 65)
plot(x, sin(x), type = "l", col = 2, xlab = expression(phi), ylab = expression(f(phi)))
Si lo que necesitas son gráficos tridimensionales dinámicos échale un vistazo a XGobi y GGobi.
Podemos usar los menús y guardar con distintos formatos. También podemos especificar donde queremos guardar el gráfico:
pdf(file = "f1.pdf", width = 8, height = 10)
plot(rnorm(10))
dev.off()
O bien, podemos copiar una figura a un fichero.
plot(runif(50))
dev.copy2eps()