手动将图例添加到具有不同图层类型的ggplot

时间:2016-02-05 19:23:07

标签: r ggplot2 legend

请考虑下面我使用下面的代码创建的图表。我想添加一个可能说“中位数”和“90%置信区间”的传奇。我已经看到这个问题部分地解决了here(感谢Roland),但是当我尝试在我自己的代码中实现它时,图例看起来很愚蠢,因为中间线没有填充功能。是否有某种方法可以使图例看起来更合理,它只显示中间线的一条线和功能区的填充框?

enter image description here

library(ggplot2)
middle = data.frame(t=c(0,1,2,3),value=c(0,2,4,6))
ribbon = data.frame(t=c(0,1,2,3),min=c(0,0,0,0),max=c(0,4,8,12))
g = ggplot()
g = g + geom_line  (data=middle,aes(x=t,y=value),color='blue',size=2)
g = g + geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max),alpha=.3,fill='lightblue')
print(g)

enter image description here

library(ggplot2)
middle = data.frame(t=c(0,1,2,3),value=c(0,2,4,6))
ribbon = data.frame(t=c(0,1,2,3),min=c(0,0,0,0),max=c(0,4,8,12))
g = ggplot()
g = g + geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max,fill="CI" ,color="CI"))
g = g + geom_line  (data=middle,aes(x=t,y=value,                     color="median"))
g = g + scale_colour_manual(values=c("lightblue","blue"))
g = g + scale_fill_manual  (values=c("lightblue"))
print(g)

1 个答案:

答案 0 :(得分:1)

首先,为guide="none"设置scale_fill_manual(),然后使用带有参数guides()的函数override.aes=根据行更改linetype=fill=和置信区间。

ggplot() + 
  geom_ribbon(data=ribbon,aes(x=t,ymin=min,ymax=max,fill="CI" ,color="CI")) + 
  geom_line(data=middle,aes(x=t,y=value,color="median"))+ 
  scale_colour_manual("Legend",values=c("lightblue","blue")) + 
  scale_fill_manual(values=c("lightblue"),guide="none")+
  guides(colour = guide_legend(override.aes = list(linetype=c(0,1),fill=c("lightblue","white"))))

enter image description here