многократное использование ggplot - PullRequest
0 голосов
/ 27 февраля 2020

Рассмотрим

a1<-data.frame(a=c(1,2,3),b=c(45,34,67),c=c(35,56,89),d=c("first"))
a2<-data.frame(a=c(1,2,3),b=c(35,40,60),c=c(30,59,92),d=c("second"))
a3<-data.frame(a=c(1,2,3),b=c(45,38,57),c=c(35,52,91),d=c("third"))

Я хочу использовать ggplot для создания трех графиков / графиков, соответствующих a1, a2 и a3. Каждый график / график должен иметь x = a и y = b, c. Поэтому на каждом графике должно быть две линии. Графики должны быть названы первым, вторым и третьим. Как мне это сделать?

Я пытался

overall<-list(a1,a2,a3)
plots<-lapply(overall,function(category){o<-melt(category, id = "a", measure = c("b", "c"));
  ggplot(o, aes(a, value, colour = variable)) + geom_line()})

, но он выдает только один сюжет. В идеале я хотел бы видеть три графика, каждый из которых содержит две строки, соответствующие b и c в кадрах данных a1, a2 и a3.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Если вы хотите сделать это с ggplot2, это опция:

a1<-data.frame(a=c(1,2,3),b=c(45,34,67),c=c(35,56,89))
a2<-data.frame(a=c(1,2,3),b=c(35,40,60),c=c(30,59,92))
a3<-data.frame(a=c(1,2,3),b=c(45,38,57),c=c(35,52,91))

library(tidyverse)
a <- list(a1,a2,a3)
for (i in seq_along(a)){
  a[[i]] <- as.data.frame(a[[i]]) %>% 
    mutate(plot_name = paste0("a", i))
}

a <- bind_rows(a)
a %>%  pivot_longer(cols =c(b,c)) %>% 
  ggplot(aes(x=a, y=value, group=name)) +
  geom_line(aes(colour = name)) +
  facet_wrap(.~plot_name, nrow =  3)

Создано в 2020-02-27 с помощью пакета представительства (v0.3.0)

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

Вы можете использовать следующий код, измененный с @ user213544 на цвет b и c

library(tidyverse)

a1<-data.frame(a=c(1,2,3),b=c(45,34,67),c=c(35,56,89))
a2<-data.frame(a=c(1,2,3),b=c(35,40,60),c=c(30,59,92))
a3<-data.frame(a=c(1,2,3),b=c(45,38,57),c=c(35,52,91))

df <- bind_rows(a1,a2,a3, .id = "id")

df %>% pivot_longer(-c(a,id)) %>% 
  ggplot(aes(x = a, y = value, colour = name)) + geom_line()+ 
  facet_wrap(~id, labeller = labeller(id = c(`1` = "a1", `2` = "a2", `3` = "a2")))+
  labs(title="Plot title",x="a", y = "b & c")

enter image description here

Обновление

a1<-data.frame(a=c(1,2,3),b=c(45,34,67),c=c(35,56,89),d=c("first"))
a2<-data.frame(a=c(1,2,3),b=c(35,40,60),c=c(30,59,92),d=c("second"))
a3<-data.frame(a=c(1,2,3),b=c(45,38,57),c=c(35,52,91),d=c("third"))

df <- bind_rows(a1,a2,a3)

df %>% pivot_longer(-c(a, d)) %>% 
  ggplot(aes(x = a, y = value, colour = name)) + geom_line()+ 
  facet_wrap(~d)+
  labs(title="Plot title",x="a", y = "b & c")

enter image description here

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

Может быть немного проще, также используя ggplot:

library(tidyverse)

df <- bind_rows(a1,a2,a3, .id = "id") %>% 
  gather(`b`, `c`, key = "values", value = "value")

  ggplot(df, aes(a, value, colour = name)) + 
  geom_line() +
  facet_wrap(~id, labeller = labeller(id = c(`1` = "first", `2` = "second", `3` = "third")))

enter image description here

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