График с ggplot график с двумя y шкалами - PullRequest
0 голосов
/ 02 июля 2018

Итак, я пытаюсь скомпилировать несколько фреймов данных в один график. Для моего значения x у меня есть количество дней, а для y - частота, с которой что-то происходит. Моя проблема в том, что один из фреймов данных (df3) находится в диапазоне от 0 до 3, а остальные от 0 до 50.

Фиктивные рамки данных:

day<-c(1,2,3)
b<-c(23,44,22)
c<-c(12,35,49)
d<-c(1,1,3)

df1<-data.frame(day,b)
df2<-data.frame(day,c)
df3<-data.frame(day,d)


ggplot()+ 
  geom_line(data=df1, aes(x=day, y=df1$`b`), color="red") +
  geom_line(data=df2, aes(x=day, y=df2$`c` ), color="green")+
  geom_line(data=df3, aes(x=day, y=df3$`d` ), color="blue")+
  labs(x="Days", y="Number of occurrences")

Это прекрасно работает, но я хочу создать другую шкалу для df1 и df2, а другую - для df3.

ОБНОВЛЕНИЕ:

Я пытаюсь это сделать, но он перезаписывает предыдущую шкалу:

d<-ggplot()+ 
  geom_line(data=df1, aes(x=day, y=df1$`a`), color="red") +
  geom_line(data=df2, aes(x=day, y=df2$`b` ), color="green")+
  scale_y_continuous(limits=c(0, 50))+
  labs(x="Days", y="Number of occurrences")

d+geom_line(data=df3, aes(x=day, y=df3$`c` ), color="blue")+
  scale_y_continuous(limits=c(0, 3))

1 Ответ

0 голосов
/ 02 июля 2018

Я думаю, что вы можете сделать это, используя sec.axis параметр ggplot2:

d<-ggplot()+ 
  geom_line(data=df1, aes(x=day, y=df1$`1`), color="red") +
  geom_line(data=df2, aes(x=day, y=df2$`1` ), color="green")+
  scale_y_continuous(limits=c(0, 50))+
  labs(x="Days", y="Number of occurrences")

d+geom_line(data=df3, aes(x=day, y=df3$`1` ), color="blue")+
  scale_y_continuous(limits=c(0, 3),
       sec.axis = sec_axis(~ . *scale_of_the_new_axis, name = "name of the new axis")
  )

Обратите внимание, что я добавил эту строку в ваш код:

sec.axis = sec_axis(~ . *scale_of_the_new_axis, name = "name of the new axis")

EDIT:

Я применил преобразование к данным df3 , затем применил обратное преобразование, чтобы реальные значения df3 отразились на новой оси.

ggplot()+ 
        geom_line(data=df1, aes(x=day, y=b), color="red") +
        geom_line(data=df2, aes(x=day, y=c ), color="green")+
        geom_line(data=df3, aes(x=day, y=d*50/3), color="blue")+
        scale_y_continuous(limits=c(0, 50), 
                           sec.axis = sec_axis(~ . *3/50, name = "name of the new axis"))+
        labs(x="Days", y="Number of occurrences")

Результат таков: enter image description here

Дайте мне знать, если вы этого хотите.

...