ggplot2 отображает две переменные на одном графике, но одну переменную с обращенной осью Y - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть один следующий пример данных:

df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
              dose=rep(c("D0.5", "D1", "D2"),2),
              len=c(6.8, 15, 33, 4.2, 10, 29.5))

Обычно мы строим две переменные VC и OJ на одном графике так:

ggplot(data=df2, aes(x=dose, y=len, group=supp, colour=supp)) +
  geom_line()

enter image description here

То, что я хотел бы получить, это построить VC на обратной оси Y, сохраняя при этом две переменные на одном графике и разделяя одну и ту же ось X. Это должно быть как пи c ниже:

enter image description here

Как я могу сделать это с ggplot2? Большое спасибо.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Вы можете умножить значения len для supp == V C на -1 и затем построить график как обычно. Затем установите новые разрывы и метки, используя scale_y_continuous.

library(dplyr)
library(ggplot2)
df2 %>%
  mutate(len = ifelse(supp == "VC", len*-1,len)) %>%
  ggplot(aes(x = dose, y = len, color = supp, group = supp))+
  geom_point()+
  geom_line()+
  scale_y_continuous(limits = c(-40,40), breaks = seq(-20,20, by = 20), 
                     labels = c(20,0,20))

enter image description here

Это то, что вы ищете?

1 голос
/ 05 февраля 2020

Я не уверен, что это то, что вы ищете.

ggplot2, не очень легко обрабатывает вторичную ось. Чтобы перевернуть график этой переменной, нужно умножить на -1, чтобы перевернуть ее.

library(tidyr)
#widen the dataframe, to separate the variables into different columns
df3<-pivot_wider(df2, id_cols = dose, names_from = supp, values_from = len)



ggplot(data=df3) +
  geom_line(aes(x=dose, y=OJ, group="OJ", color="OJ")) +
  geom_line(aes(x=dose, y=-1*VC, group="VC", color="VC")) 

enter image description here

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