polygon
Para colorear un área puedes usar la función polygon
. Como ejemplo considera la siguiente línea que empieza y acaba en el mismo valor del eje X y usa la función para colorear el área.
# Datos
x <- c(1:7, 7:1)
y <- c(10, 8, 12, 8, 6, 10,
7, 2, 1, 4, 3, 1, 4, 5)
# Gráfico líneas
plot(x, y, type = "l")
# Polígono
polygon(x, y, col = "#65BFFF")
# Puntos
points(x, y, pch = 19)
Si tienes dos líneas y quieres sombrear el área entre ellas tendrás que crear tu gráfico y pasar lo siguiente a la función polygon
:
# Rejilla de valores del eje X
x <- seq(0, 10, 0.01)
# Datos
set.seed(1)
y1 <- 2 * cos(x) + 8
y2 <- 3 * sin(x) + 4
# Líneas
plot(x, y1, type = "l",
ylim = c(1, 10), ylab = "y")
lines(x, y2, type = "l", col = 2)
# Colorear el área entre las líneas
polygon(c(x, rev(x)), c(y2, rev(y1)),
col = "#6BD7AF")
Sin embargo, puede que hayas notado que el estilo de las líneas se ha sobrescrito por los bordes del polígono. Para solucionar este problema puedes añadir las líneas de nuevo una vez que crees el área y eliminar el borde del polígono con lty = 0
.
# Rejilla de valores del eje X
x <- seq(0, 10, 0.01)
# Datos
set.seed(1)
y1 <- 2 * cos(x) + 8
y2 <- 3 * sin(x) + 4
# Líneas
plot(x, y1, type = "l",
ylim = c(1, 10), ylab = "y")
lines(x, y2, type = "l", col = 2)
# Colorear el área entre las líneas
polygon(c(x, rev(x)), c(y2, rev(y1)),
col = "#6BD7AF", lty = 0)
# Volver a dibujar las líneas
lines(x, y1, col = 1, lwd = 2)
lines(x, y2, col = 2, lwd = 2)
En lugar de sombrear el área con un color también puedes usar líneas de sombreado, especificando su densidad con density
y el ángulo de las líneas con angle
. Recuerda añadir las curvas de nuevo si quieres que tengan un color diferente.
# Rejilla de valores del eje X
x <- seq(0, 10, 0.01)
# Datos
set.seed(1)
y1 <- 2 * cos(x) + 8
y2 <- 3 * sin(x) + 4
# Líneas
plot(x, y1, type = "l",
ylim = c(1, 10), ylab = "y")
lines(x, y2, type = "l", col = 2)
# Área con líneas de sombreado
polygon(c(x, rev(x)), c(y2, rev(y1)),
col = "#6BD7AF",
density = 10, angle = 45)
También puedes personalizar el color, el tipo de línea y el ancho del borde del polígono con border
, lty
y lwd
, respectivamente.
# Rejilla de valores del eje X
x <- seq(0, 10, 0.01)
# Datos
set.seed(1)
y1 <- 2 * cos(x) + 8
y2 <- 3 * sin(x) + 4
# Líneas
plot(x, y1, type = "l",
ylim = c(1, 10), ylab = "y")
lines(x, y2, type = "l", col = 2)
polygon(c(x, rev(x)), c(y2, rev(y1)),
col = "#6BD7AF", border = 2,
lwd = 2, lty = 2)
Otra opción es sombrear el área para un rango específico de valores del eje X. Para ello puedes usar el siguiente código y cambiar las variables xmin
y xmax
para ajustarse a tu caso (obviamente xmin
debe ser menor que xmax
).
# Rejilla de valores del eje X
x <- seq(0, 10, 0.01)
# Datos
set.seed(1)
y1 <- 2 * cos(x) + 8
y2 <- 3 * sin(x) + 4
# Líneas
plot(x, y1, type = "l",
ylim = c(1, 10), ylab = "y")
lines(x, y2, type = "l", col = 2)
# Valor mínimo y máximo de X
xmin <- 2
xmax <- 8
polygon(c(x[x >= xmin & x <= xmax],
rev(x[x >= xmin & x <= xmax])),
c(y2[x >= xmin & x <= xmax],
rev(y1[x >= xmin & x <= xmax])),
col = "#6BD7AF")
lines(x, y2, col = 2)
Por último, si quieres sombrear el área con una paleta de colores continua puedes crear un bucle sobre el grid de valores del eje y modificar el color del borde en cada iteración. Ten en cuenta que la rejilla de valores debe ser densa para crear el efecto degradado.
# Rejilla de valores del eje X
x <- seq(0, 10, 0.01)
# Datos
set.seed(1)
y1 <- 2 * cos(x) + 8
y2 <- 3 * sin(x) + 4
# Líneas
plot(x, y1, type = "l",
ylim = c(1, 10), ylab = "y")
lines(x, y2, type = "l")
# Colorear con la paleta de color
l <- length(x)
color <- hcl.colors(l, "TealGrn") # Paleta
for (i in 1:l) {
polygon(c(x[i], rev(x[i])),
c(y2[i], rev(y1[i])),
border = color[i], col = NA)
}
# Sobrescribir las líneas
lines(x, y1)
lines(x, y2)
También te puede interesar