Ответ 1
Общее правило для выполнения чего-либо в ggplot2:
- Создайте кадр данных, который кодирует информацию, которую вы хотите построить
- Передайте этот фрейм данных геомете
В этом случае это немного усложняется из-за конкретного аспекта сюжета, который вы хотите изменить. Силы, которые будут разработаны ggplot2 таким образом, чтобы они отделяли элементы данных графика (то есть геометрию) от элементов без данных (т.е. Темы), и так получилось, что фон сюжета попадает под "-data".
Всегда существует возможность изменить основной объект сетки вручную, но это утомительно, и детали могут измениться с различными версиями ggplot2, Вместо этого мы будем использовать "хак", на который ссылается Хэдли в этом вопросе.
#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)