Как включить вторую ось в ggplot с другим фреймом данных? - PullRequest
0 голосов
/ 06 августа 2020

У меня 2 фрейма данных. Первый фрейм данных

df1
Year        BP
1 1550 -0.004343344
2 1551  0.033794533
3 1552  -0.0034535036
4 1553  0.054935152
5 1554  0.029320574
6 1555  -0.001854373

Я рисую график ggplot для указанного выше кадра данных:

ggplot(df1,aes(Year,BP))+geom_line(aes(color="IP"),lwd=1)

Теперь я хотел бы добавить вторую ось Y в правом углу этого самого тот же график ggplot для кадра данных ниже df2, также помеченный как «вторая ось». Я хочу включить переменные CL, PR и NR на тот же график. Как этого добиться в R? Примечание, чтобы служить примером, я предоставил только 5 лет, но на самом деле у меня более 100 лет.

df2
Year      V1         U   CL         PR          FO   NR
1   1550 7377211     0 0.03615170 0.1405466      0 0.8232772
2   1551 7377212     0 0.03622309 0.1397468      0 0.8240073
3   1552 7377213     0 0.03631065 0.1389448      0 0.8247278
4   1553 7377214     0 0.03639766 0.1381439      0 0.8254495
5   1554 7377215     0 0.03647239 0.1373441      0 0.8261718
6   1555 7377216     0 0.03655438 0.1365248      0 0.8269085

EDIT: Это то, что я пробовал до сих пор:

f<-ggplot()+ 
geom_line(data=df1, aes(x=Year, y=NBP), color="red")

f+geom_line(data=df2, aes(x=Year, y=CL ), color="blue")+
  scale_y_continuous(limits=c(-0.1, 0.2),
                     sec.axis = sec_axis(~ . +1, name = "Land Fraction")
  )

Is есть ли что добавить PR и NR к этому сюжету?

1 Ответ

1 голос
/ 06 августа 2020

Отсутствие большего контекста, одна из причин, по которой ggplot2 потребовалось так много времени для поддержки нескольких осей, заключается в том, что они часто закрывают или сбивают с толку читателя. Если не сделать это тщательно и четко, они могут предположить, что данные не соответствуют действительности. Я предполагаю, что, возможно, лучшим способом моделирования этих данных графически было бы использование фасетов

Могу ли я предложить вместо этого фасетирование?

library(dplyr)   # bind_rows, %>%
library(tidyr)   # pivot_longer
library(ggplot2)
bind_rows(
  pivot_longer(df1, -Year),
  pivot_longer(df2, -Year)
) %>%
  ggplot(aes(Year, value)) +
  geom_line() +
  facet_wrap(~ name, ncol = 3, scales = "free_y")

ggplot2, граненый

(я продемонстрировал это, используя dplyr и tidyr, хотя это может быть сделано на других диалектах R, включая основание R и data.table.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...