geom_tile geom_rect r ggplot2

geom_rect - geom_tile in r



geom_rect y alpha: ¿funciona esto con valores codificados? (3)

Mismo título, sin embargo, reformuló por completo la pregunta.

¿Por qué funciona el alfa en la primera trama pero no en la segunda? Estoy luchando para ver por qué con los valores codificados, el rect se dibuja en el lugar correcto pero no se hace transparente, pero cuando está en un data.frame funciona como se esperaba.

mtcars$cyl <- factor(mtcars$cyl) mtcars$am <- factor(mtcars$am) ggplot(mtcars) + geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2) ggplot(mtcars) + geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)


Gracias por aclarar tu pregunta. Esto me resultaba desconcertante, así que fui a Google y terminé aprendiendo algo nuevo (después de trabajar en torno a algunos caprichos en sus ejemplos). Aparentemente, lo que estás haciendo es dibujar muchos rectángulos uno encima del otro, anulando efectivamente la semi transparencia que deseas. Entonces, las únicas formas de superar esto son codificar las coordenadas del rectángulo en un df separado, o ...

ggplot() + geom_density(data=mtcars, aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), alpha=0.2, fill="red")

... simplemente no asigne su data.frame globalmente a la trama. En cambio, solo utilícelo en la (s) capa (s) que desee (en este ejemplo, geom_density ), y deje las otras capas libres de df. O, mejor aún, use annotate para modificar su trazado desde el df predeterminado:

ggplot(mtcars) + geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + annotate("rect", xmin=100, xmax=200, ymin=0, ymax=Inf, alpha=0.2, fill="red")

Este último método le permite utilizar un único data.frame para todo el gráfico, por lo que no tiene que especificar el mismo df para cada capa.

Ambos métodos devuelven parcelas idénticas:


Otra solución consiste en dar a geom_rect un objeto de datos de fila única para garantizar que solo se dibuje un rectángulo:

ggplot(mtcars) + geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + geom_rect(data=mtcars[1,], aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)


ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2)) + geom_rect(alpha=.2) + geom_rect(data=data.frame(xmin=3, xmax=6, ymin=3, ymax=5), aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax), fill="green", alpha=.2)