r - ggplot2 - создать затененную область между двумя слоями geom_abline

Есть несколькосообщенийоб использовании заштрихованных областей в ggplot2, но я не не думаю, что любой точно ответит на мой вопрос. У меня есть два наклона для линий в ряде условий, и я хотел бы затенить область между ними. Вот пример данных:

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— средний параметр наклона из отдельной процедуры подбора, а наклон Uи наклон Lпредставляют верхнюю и нижнюю доверительные области. по оценке наклона в каждом состоянии. Перехваты должны быть одинаковыми. Следующий код строит наиболее подходящие линии для каждого условия, используя некоторую грань:

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,lope=slopeUи intercept=int,lope= наклон Lк графику и закрасьте область между ними (например, при alpha=.5соответствующим цветом cond1).

Я понимаю, что с небольшими манипуляциями я мог бы создать фрейм данных, определяющий значения этих линий по крайней мере для двух значений x, а затем построить соответствующий geom_ribbon или geom_polygon для создания заштрихованной области, однако я хотел бы найти более элегантный решение.Или только вручную указывать какие-то координаты по склонам и перехватам? Как мне лучше всего создать требуемый фрейм данных (в котором должно быть больше строк, чем в исходном фрейме, чтобы учесть все комбинации условий и пар x, y).

14
задан Community 23 May 2017 в 11:45
поделиться