La función legend
permite agregar leyendas a gráficos de R base.
Vamos a utilizar el siguiente gráfico en los ejemplos de esta guía.
# Gráfico reproducible
plotl <- function(points = FALSE, ...) {
x <- seq(0, 30, 0.01)
plot(besselJ(x, 0), col = 2, type = "l",
lwd = 2, ylab = "Jn(x)", xlab = "", ...)
lines(besselJ(x, 2), col = 3,
type = "l", lwd = 2, lty = 2)
if(points == TRUE) {
points(c(1335, 1325),
c(besselJ(x, 0)[1335],
besselJ(x, 2)[1325]),
pch = c(15, 18), cex = 2, col = 2:3)
}
}
plotl()
Opción 1. Establece el argumento x
a "top"
, "topleft"
, "topright"
, "bottom"
, "bottomleft"
, "bottomright"
, "left"
, "right"
o "center"
. En este escenario no tendrás que establecer el argumento y
.
El texto de la leyenda se puede establecer con el argumento legend
y el tipo de línea, el ancho y el color con los argumentos lty
, lwd
y col
, respectivamente.
plotl()
legend(x = "topright", # Posición
legend = c("J0", "J2"), # Textos de la leyenda
lty = c(1, 2), # Tipos de línea
col = c(2, 3), # Colores
lwd = 2) # Ancho de línea
Opción 2. Usa los argumentos x
e y
como coordenadas para indicar donde dibujar la leyenda.
plotl()
legend(x = 1900, y = 0.8, # Coordenadas
legend = c("J0", "J2"), # Textos de la leyenda
lty = c(1, 2), # Tipos de línea
col = c(2, 3), # Colores
lwd = 2) # Ancho de línea
Opción 3. Usa una posición y establece el margen desde el borde con el argumento inset
.
El valor del argumento representa la distancia desde el margen como fracción de la región del gráfico.
plotl()
legend("topright",
inset = 0.05, # Distancia desde el margen
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
lwd = 2)
Ten en cuenta que también puedes establecer pch
para indicar símbolos sobre las líneas en caso de ser necesario
plotl(points = TRUE)
legend("topright",
inset = 0.05,
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
lwd = 2,
pch = c(15, 18)) # Símbolos pch
Si tienes un gráfico de barras, de sectores u otro gráfico con relleno puedes establecer el argumento fill
en lugar de lty
.
Puedes crear cuadrados rellenos con el argumento fill
, cuyo color de borde se puede cambiar con el argumento border
.
barplot(table(mtcars$gear), col = 2:4)
legend("topright",
legend = c(3, 4, 5),
fill = 2:4, # Color de los cuadrados
border = "black") # Color del borde de
# los cuadrados
Si las áreas de tu gráfico están sombreadas con líneas puedes especificar los argumentos density
y angle
para emparejarlos.
barplot(table(mtcars$gear), col = 2:4,
density = 30, angle = 90)
legend("topright",
legend = c(3, 4, 5),
fill = 2:4,
density = 30, # Líneas de sombreado
angle = 90) # Ángulo de las líneas de sombreado
Estableciendo horiz = FALSE
se mostrará una leyenda en modo horizontal.
plotl()
legend("top",
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
lwd = 2,
horiz = TRUE)
También puedes especificar el número de columnas de la leyenda si horiz = FALSE
con el argumento ncol
.
plotl()
legend("top",
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
lwd = 2,
ncol = 2)
Es posible agregar un título a la leyenda y modificar su ajuste horizontal y color con los argumentos title
, title.adj
y title.col
, respectivamente.
plotl()
legend("topright", legend = c("J0", "J2"),
title = "TÍTULO", # Título
title.adj = 0.5, # Ajuste horizontal
title.col = "blue", # Color del título
lty = c(1, 2), col = c(2, 3), lwd = 2)
Los argumentos box.lty
, box.lwd
y box.col
permiten modificar el tipo de línea, el ancho y el color de la caja de la leyenda, respectivamente.
plotl()
legend(1500, 0.9,
legend = c("J0", "J2"),
box.lty = 2, # Tipo de línea de la caja
box.lwd = 2, # Ancho de línea de la caja
box.col = 4, # Color de línea de la caja
lty = c(1, 2),
col = c(2, 3),
lwd = 2)
Además de lo anterior también puedes modificar el color de fondo de la caja con el argumento bg
.
plotl()
legend("topright", inset = 0.05,
legend = c("J0", "J2"),
bg = rgb(1, 0, 0, alpha = 0.15),
lty = c(1, 2),
col = c(2, 3),
lwd = 2)
Puedes eliminar la caja (borde) de la leyenda usando dos métodos diferentes.
Opción 1. Establece bty = "n"
.
plotl()
legend(1500, 0.9,
legend = c("J0", "J2"),
bty = "n", # Elimina la caja
lty = c(1, 2),
col = c(2, 3),
lwd = 2)
Opción 2. Establece box.lty = 0
plotl()
legend(1500, 0.9,
legend = c("J0", "J2"),
box.lty = 0, # Elimina la caja
lty = c(1, 2),
col = c(2, 3),
lwd = 2)
El argumento cex
controla el tamaño de la leyenda. El valor por defecto es 1.
plotl()
legend("topright",
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
cex = 1.5, # Tamaño
lwd = 2)
En algunos escenarios tendrás que establecer la leyenda fuera del gráfico porque no cabe dentro. Para ello tendrás que incrementar los márgenes del gráfico, agregar la leyenda, establecer el argumento xpd
como TRUE
y ajustar los valores del argumento inset
.
# Haz la ventana más ancha que alta
# windows(width = 5.5, height = 5)
# Guarda los parámetros gráficos actuales
opar <- par(no.readonly = TRUE)
# Cambia los márgenes del gráfico
# (el cuarto es el margen derecho)
par(mar = c(6, 5, 4, 6.5))
plotl()
legend(x = "topright",
inset = c(-0.35, 0), # Tendrás que ajustar el primer valor
# dependiendo del tamaño de la ventana
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
lwd = 2,
xpd = TRUE) # Necesario para poner la leyenda fuera del gráfico
# Volvemos a los parámetros gráficos originales
on.exit(par(opar))
Una alternativa es establecer la leyenda debajo (o encima) del gráfico siguiendo el mismo procedimiento de antes pero incrementando los márgenes inferior or superior.
# windows(width = 5, height = 5)
# Guarda los parámetros gráficos actuales
opar <- par(no.readonly = TRUE)
# Cambia los márgenes del gráfico (el primero es el margen inferior)
par(mar = c(6, 4.1, 4.1, 2.1))
plotl()
legend(x = "bottom",
inset = c(0, -0.35), # Tendrás que ajustar el segundo valor
# dependiendo del tamaño de la ventana
legend = c("J0", "J2"),
lty = c(1, 2),
col = c(2, 3),
lwd = 2,
xpd = TRUE, # Necesario para poner la leyenda fuera del gráfico
horiz = TRUE) # Leyenda horizontal
# Volvemos a los parámetros gráficos originales
on.exit(par(opar))
También te puede interesar