R:多层ggplot的自定义图例

我试图得到一个ggplot自定义传说与数据来自两个单独的数据框。 请参阅下面的重现性示例。

我试图完成的是有一个描述丝带填充,黑线和红线的图例。

require(ggplot2) x=seq(1,10,length=100) data=data.frame(x,dnorm(x,mean=6.5,sd=1)) names(data)=c('x','new.data') x.ribbon=seq(1,10,length=20) ribbon=data.frame(x.ribbon, dnorm(x.ribbon,mean=5,sd=1)+.01, dnorm(x.ribbon,mean=5,sd=1)-.01, dnorm(x.ribbon,mean=5,sd=1)) names(ribbon)=c('x.ribbon','max','min','avg') ggplot()+geom_ribbon(data=ribbon,aes(ymin=min,ymax=max,x=x.ribbon),fill='lightgreen')+ geom_line(data=ribbon,aes(x=x.ribbon,y=avg),color='black')+ geom_line(data=data,aes(x=x,y=new.data),color='red')+ xlab('x')+ylab('density') 

在这里输入图像描述

而不是设置colourfill使用几何美学 aes映射它们,然后使用scale_xxx_manualscale_xxx_identity

例如

 ggplot()+geom_ribbon(data=ribbon,aes(ymin=min,ymax=max,x=x.ribbon,fill='lightgreen'))+ geom_line(data=ribbon,aes(x=x.ribbon,y=avg,color='black'))+ geom_line(data=data,aes(x=x,y=new.data,color='red'))+ xlab('x')+ylab('density') + scale_fill_identity(name = 'the fill', guide = 'legend',labels = c('m1')) + scale_colour_manual(name = 'the colour', values =c('black'='black','red'='red'), labels = c('c2','c1')) 

在这里输入图像描述

请注意,您必须指定guide = 'legend'来强制scale_..._identity以产生图例。

scale_...manual你可以传递一个名为向量的值 – 名称应该是你所谓的颜色调用geom_...然后你可以很好地标记。