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')
而不是设置colour
和fill
, 使用几何美学 aes
映射它们,然后使用scale_xxx_manual
或scale_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_...
然后你可以很好地标记。