La función polygon
puede ser utilizada para sombrear el área bajo una curva de densidad. Tan solo necesitas pasarle el objeto density
y especificar el color.
# Datos
set.seed(3)
y <- rnorm(150)
den <- density(y)
# Gráfico
plot(den)
# Sombrear área
polygon(den, col = "slateblue1")
Si estás dibujando varias curvas de densidad y algunas de ellas se solapan es recomendable utilizar colores con transparencia, de modo que puedas ver ambas curvas. Para este propósito puedes utilizar la función rgb
y especificar la transparencia (entre 0 y 1) en el argumento alpha
. Consulta la sección de colores si necesitas convertir colores HEX en RGB.
# Datos
set.seed(3)
x <- rnorm(200)
y <- rnorm(150, mean = 1)
# Estimaciones de densidad
denx <- density(x)
deny <- density(y)
# Gráfico
plot(denx,
ylim = c(0, max(c(denx$y, deny$y))),
xlim = c(min(c(denx$x, deny$x)),
max(c(denx$x, deny$x))))
lines(deny)
# Colorear las áreas
polygon(denx, col = rgb(0.78, 0.89, 1, alpha = 0.6))
polygon(deny, col = rgb(0.51, 0.44, 1, alpha = 0.6))
También puedes sombrear áreas específicas bajo las curvas, como por ejemplo el área mayor que determinado punto, el área menor a cierto punto o el área entre dos puntos del eje X.
Colorear el área para valores mayores que 1
# Datos
set.seed(3)
y <- rnorm(150)
# Estimación densidad
den <- density(y)
# Gráfico
plot(den)
# Sombrear área for para valores mayores o iguales a 1
value <- 1
polygon(c(den$x[den$x >= value ], value),
c(den$y[den$x >= value ], 0),
col = "slateblue1",
border = 1)
Colorear el área para valores menores que 1
# Datos
set.seed(3)
y <- rnorm(150)
# Estimación densidad
den <- density(y)
# Gráfico
plot(den)
# Sombrear área for values lower or equal to 1
value <- 1
polygon(c(den$x[den$x >= value ], value),
c(den$y[den$x >= value ], 0),
col = "slateblue1",
border = 1)
Sombrear el área entre -1 y 1
# Datos
set.seed(3)
y <- rnorm(150)
# Estimación densidad
den <- density(y)
# Gráfico
plot(den)
# Área entre -1 y 1
valor1 <- -1
valor2 <- 1
# Índices inferior y superior del eje X
l <- min(which(den$x >= valor1))
h <- max(which(den$x < valor2))
polygon(c(den$x[c(l, l:h, h)]),
c(0, den$y[l:h], 0),
col = "slateblue1")
También te puede interesar