Есть fewposts относительно использования затененных областей в ggplot2, но я не думаю, что точно ответит на мой вопрос. У меня есть два наклона для линий в нескольких условиях, и я хотел бы затенять область между ними. Вот пример данные:r - ggplot2 - создать затененную область между двумя слоями geom_abline
dat <- data.frame(cond1=c("a","a","b","b"),
cond2=c("c","d","c","d"),
x=c(1,5),
y=c(1,5),
sl=c(1,1.2,0.9,1.1),
int=c(0,0.1,0.1,0),
slopeU=c(1.1,1.3,1.2,1.2),
slopeL=c(.9,1,0.7,1))
Здесь sl
является средним параметра наклона от отдельной процедуры подгонки и slopeU
и slopeL
представляют собой верхнюю и нижнюю области доверия на оценке наклона в каждом состоянии. Перехваты ограничиваются одинаковыми. Следующий код участки наиболее подходящие линии для каждого состояния, используя некоторую огранку:
p <- ggplot(dat,aes(x=x,y=y,colour=cond1))
p <- p + facet_grid(. ~ cond2)
p <- p + geom_blank()
p <- p + geom_abline(aes(intercept=int,slope=sl,colour=cond1),data=dat)
p
Я хотел бы добавить строки, определенные intercept=int, slope=slopeU
и intercept=int, slope=slopeL
к участку и затенять область между ними (например, при alpha=.5
в соответствующем cond1 color).
Я понимаю, что с небольшой манипуляцией я мог бы создать кадр данных, определяющий значения этих строк, по крайней мере для двух значений x, а затем построить соответствующий geom_ribbon или geom_polygon для создания заштрихованной области, однако я хотел бы найти более элегантное решение. Или вручную указывать некоторые координаты со склонов и перехватывает единственный способ? Как лучше всего создать требуемый фрейм данных (для которого нужно будет иметь больше строк, чем исходный кадр, для учета всех комбинаций условий и x, y пар).
Это потрясающе; спасибо Джоран. – tsawallis
Так что в основном я работаю с моей прикладной проблемой, но я не могу получить цвета в затененных областях до cond1, даже с помощью вашего решения точно. Заполненные области ленты серы (при альфа = .5), но также имеют тонкие сплошные границы линий. Где я иду не так? Может ли это быть разницей версии ggplot2? Я на 0.9.0. Команда ggplot, которую я использую, такая же, как в исходном сообщении, с 'p + ribs + guide (fill = guide_legend (override.aes = list (alpha = 0.1))), вставленный ниже. – tsawallis
@waldog Простите, просто пропустил немного, когда копировал + вставлял мой код.Вам просто нужно добавить 'fill = cond1' в' aes() 'либо в вызове ggplot() верхнего уровня, либо в вызове' geom_ribbon' внутри функции. Я отредактирую мгновенно ... – joran