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