Добавить легенду к сюжету с 2-й осью - PullRequest
0 голосов
/ 15 мая 2019

Я создал сюжет (с 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 голосов
/ 15 мая 2019

Я думаю, что вам нужно настроить фрейм данных для представления SAF и MD уровней факторов:

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

...