1. ホーム
  2. r

[解決済み] 複数レイヤーの ggplot のためのカスタム凡例

2022-03-10 15:44:55

質問

2つの別々のデータフレームから取得したデータで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_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_... というように、きれいにラベルを貼ることができます。