ncol facet_wrap facet_grid change r ggplot2

facet_wrap - Condicionalmente cambiar el fondo del panel con facet_grid?



facet_grid vs facet_wrap (2)

Estoy usando el conjunto de datos "consejos" en ggplot2 . Si lo hago

sp = ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + geom_point(shape=1) + facet_grid(sex ~ day)

La trama sale bien. Pero ahora quiero cambiar el fondo del panel para las parcelas debajo de "Vie". ¿Hay alguna forma de hacer esto?

Mejor aún, ¿puedo cambiar los colores de manera condicional pasando parámetros? Por ejemplo, si más de 3 puntos están por debajo de 0.1, entonces cambie el fondo del panel (para ese panel) a un cierto color, mientras que los demás siguen siendo el gris claro predeterminado.


La regla general para hacer cualquier cosa en ggplot2 es:

  1. Cree un marco de datos que codifique la información que desea trazar
  2. Pase ese marco de datos a un geom

Esto se complica un poco más en este caso debido al aspecto particular de la trama que desea modificar. Los poderes que se diseñan ggplot2 de una manera que separa los elementos de datos de la trama (es decir, geom) de los elementos que no son de datos (es decir, los temas), y sucede que el fondo de la trama cae bajo la categoría "no datos".

Siempre existe la opción de modificar el objeto de grilla subyacente manually pero esto es tedioso y los detalles pueden cambiar con diferentes versiones de ggplot2 . En cambio, emplearemos el "truco" al que Hadley se refiere en this pregunta.

#Create a data frame with the faceting variables # and some dummy data (that will be overwritten) tp <- unique(tips[,c(''sex'',''day'')]) tp$total_bill <- tp$tip <- 1 #Just Fri ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + geom_rect(data = subset(tp,day == ''Fri''),aes(fill = day),xmin = -Inf,xmax = Inf, ymin = -Inf,ymax = Inf,alpha = 0.3) + geom_point(shape=1) + facet_grid(sex ~ day)

#Each panel ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + geom_rect(data = tp,aes(fill = day),xmin = -Inf,xmax = Inf, ymin = -Inf,ymax = Inf,alpha = 0.3) + geom_point(shape=1) + facet_grid(sex ~ day)


No puedo comentar todavía ... así que aquí hay una respuesta adicional a joran su respuesta.

Si tiene problemas con la configuración de transparencia, como establecer alfa = 0.2 pero sin notar ninguna diferencia, puede ser debido a los datos que le da a ggplot.

"Gracias por aclarar tu pregunta. Esto me resultaba desconcertante, así que fui a Google y terminé aprendiendo algo nuevo (después de trabajar con algunos ejemplos extraños). Aparentemente, lo que estás haciendo es dibujar muchos rectángulos uno encima del otro , anulando efectivamente la semi transparencia que desea. Por lo tanto, las únicas formas de superar esto son codificar las coordenadas del rectángulo en una df separada "

Esta respuesta viene de geom_rect y alpha: ¿funciona esto con valores codificados?