Condicionalmente cambiar el fondo del panel con facet_grid?

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 ttwig sale bien. Pero ahora quiero cambiar el fondo del panel para las plots 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 dataframe que codifique la información que desea trazar
  2. Pase ese dataframe a un geom

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

Siempre existe la opción de modificar el objeto de grilla subyacente manualmente, 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 esta 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) 

enter image description here

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

enter image description here

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 rectangularjs 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?