Подтвердить что ты не робот

Условно изменить фон панели с facet_grid?

Я использую набор "советов" в ggplot2. Если я делаю

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

Сюжет прекрасен. Но теперь я хочу изменить фон панели только для участков под "Пт". Есть ли способ сделать это?

Еще лучше, могу ли я условно менять цвета, передавая параметры? Например, если более 3 точек меньше 0,1, то измените фон панели (только для этой панели) на определенный цвет, а остальные останутся по умолчанию светло-серыми?

4b9b3361

Ответ 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) 

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

Ответ 2

Я еще не могу прокомментировать... так что это дополнительный ответ на его ответ.

Если у вас возникли проблемы с настройкой прозрачности, например установка alpha = 0.2, но не заметила какой-либо разницы, это может быть из-за данных, которые вы передаете ggplot.

"Спасибо за разъяснение вашего вопроса. Это меня озадачило, поэтому я пошел в google и в конечном итоге изучил что-то новое (после того, как он работал над некоторыми капризами в своих примерах). Очевидно, что вы делаете рисование многих прямоугольников сверху друг от друга, эффективно сводя на нет полупрозрачность, которую вы хотите. Таким образом, единственные способы преодоления этого - жестко закодировать координаты прямоугольника в отдельном df"

Этот ответ исходит из geom_rect и alpha - работает ли это с жестко закодированными значениями?