考虑一下
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。所以每个图表中应该有两行。图表应命名为first、second和third。我该怎么做呢?
我试过了
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()})但它只生成一个图。理想情况下,我希望看到三个图,每个图包含两条线,分别对应于数据框a1、a2和a3中的b和c。
发布于 2020-02-27 16:05:29
如果您想使用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)由reprex包创建于2020-02-27 (v0.3.0)
发布于 2020-02-27 16:31:37
也许更简单一点,也是使用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")))

发布于 2020-02-27 16:44:18
您可以使用以下代码从@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")

更新
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")

https://stackoverflow.com/questions/60428339
复制相似问题