Условно изменить фон панели с facet_grid? - PullRequest
31 голосов
/ 24 марта 2012

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

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

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

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

Ответы [ 2 ]

59 голосов
/ 24 марта 2012

Общее правило для действий в ggplot2 :

  1. Создать фрейм данных, который кодирует информацию, которую вы хотите построить
  2. Передать эти данные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) 

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 голосов
/ 03 апреля 2017

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...