La función 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)

La función polygon

Sombrear el área entre dos líneas

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:

Sombrear el área entre dos líneas

# 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.

Colorear el área entre dos curvas en R

# 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.

Área con líneas de densidad

# 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.

La función polygon en R

# 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)

Colorear un área específica entre las líneas

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)

Colorear un área específica entre dos líneas en R

Colorear el área entre dos curvas con una paleta continua

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.

Colorear el área entre dos curvas con una paleta de colores continua en R

# 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