将图例添加到具有2个y轴的图中

时间:2019-05-15 13:08:10

标签: r ggplot2 plot legend

我创建了一个绘图(使用ggplot2),现在我需要添加一个图例。无论我使用什么功能,似乎都行不通。

我已经尝试过使用scale_fill_manual,scale_color_manual,legend.title或legend.text等,

我的数据在数据框中,如下所示:

  Date          SAF         MD
a 2018-06-04    3.42362418  120.00
b 2018-06-05    0.44019347  15.22
c 2018-06-06    0.20207786  6.89
d 2018-06-07    0.81154034  29.54
e 2018-06-08    0.05057167  1.48
f 2018-06-09    0.03542385  1.19
p <- ggplot(data=c,aes(x=date))+ 
  geom_point(aes(y=MD*15/440),stat='identity', group=1, col='blue',
             size=2.5, shape=21)+     
  geom_line(aes(y=MD*15/440), stat='identity',group=1, 
            color='blue')+
  geom_point(aes(y=SAF),group=1, col='orange', size=1.5)+ 
  geom_line(aes(y=SAF), stat='identity', group=1, 
            color='orange')+ 
  scale_y_continuous(name = 'SAF', sec.axis = sec_axis(~.*440/15, name = 'MD'), limits = c(0,15))+
  ggtitle('MD and SAF')+ 
  scale_x_date(date_labels = '%e %b %y', date_breaks='1 week')+ 
  theme(axis.text.x = element_text(angle=90))

没有特别的错误消息,我可以看到该图,但是图例没有出现。

1 个答案:

答案 0 :(得分:0)

我认为您需要调整数据框以代表SAFMD因素水平:

d <- rbind(data.frame(date=c$Date, SAF=c$SAF, myfactor='SAF'), data.frame(date=c$Date, SAF=c$MD, myfactor='MD'))
p <- ggplot(data=d,aes(x=date))+ 
  geom_point(aes(y=SAF*15/440, color=myfactor, shape=myfactor), data=d[d$myfactor=='MD', ])+
  geom_line(aes(y=SAF*15/440, color=myfactor), data=d[d$myfactor=='MD', ])+

  geom_point(aes(y=SAF, color=myfactor, shape=myfactor), data=d[d$myfactor=='SAF', ])+
  geom_line(aes(y=SAF, color=myfactor), data=d[d$myfactor=='SAF', ])+


  scale_y_continuous(name = 'SAF', sec.axis = sec_axis(~.*440/15, name = 'MD'), limits = c(0,15))+
  ggtitle('MD and SAF')+ 
  scale_x_date(date_labels = '%e %b %y', date_breaks='1 week')+ 
  scale_color_manual(values=c(SAF='orange', MD='blue'))+ 
  scale_shape_manual(values=c(SAF=21, MD=20))+ 
  scale_size_manual(values=c(SAF=1.5, MD=2.5))+ 
  theme(axis.text.x = element_text(angle=90))

p

enter image description here