为了账号安全,请及时绑定邮箱和手机立即绑定

R:多层ggplot的自定义图例

R:多层ggplot的自定义图例

呼啦一阵风 2019-10-28 11:05:08
我正在尝试为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')
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

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

)

查看完整回答
反对 回复 2019-10-28
  • weixin_慕虎2492208
    weixin_慕虎2492208
    您好,我是R初学者,想请教您一下,我把数据导入R,分别用geom_line 做一个x对应两个y值 的折线图,然后如何生成legend呢? 没有看懂您上面的回答。
?
Helenr

TA贡献1780条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-10-28
  • 2 回答
  • 0 关注
  • 1489 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信