猿问

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')

呼啦一阵风
浏览 1490回答 2
2回答

沧海一幻觉

不用设置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_...,然后可以很好地标记。)

Helenr

顺便说一句,为进一步澄清,我会说:geom_line(aes(..., color = 'a')...)然后scale_color_manual(..., values = c('a' = 'black', ...))。这样一来,很明显,其中的字符串aes(color = 'string')只是一个绑定,实际颜色将是您在中定义的颜色scale_color_manual()。
随时随地看视频慕课网APP
我要回答