是否有R函数在for循环下绘制ggplot

时间:2019-08-18 10:00:56

标签: r

我有一个数据框df。我需要绘制作为因素的变量。例如,这里是x,a和b

   df
   x y g  a  b
 1 a 2 1  df df
 2 a 3 2  fg fg
 3 b 4 1  gf gf
 4 b 5 2  fd fd

我在下面写了一个代码,但是我无法执行

  as <- names(Filter(is.factor, df))
  for(i in 1:length(as))
  {
  ssa <- ggplot(data=df,aes_string(x=as[i],fill=as[i]))+geom_bar(stat = 
  "count")
  } 

1 个答案:

答案 0 :(得分:0)

对代码的直接修复是添加索引来存储对象。

library(ggplot2)

ssa <- vector("list", length(as))

for(i in 1:length(as)) {
   ssa[[i]] <- ggplot(data=df,aes_string(x=as[i],fill=as[i])) + 
               geom_bar(stat = "count")
} 

现在,您分别在ssa[[1]]ssa[[2]]ssa[[3]]中拥有所有三个对象。

但是,有更好的方法可以执行相同的操作。您可以使用lapply

plot_obj <- lapply(df[as], function(x) 
            ggplot(data= df, aes(x, fill = x)) + geom_bar(stat = "count"))

或者在将数据收集为长格式后使用facets

tidyr::gather(df[as]) %>%
   ggplot() + aes(value, fill = value) + geom_bar(stat = "count") + 
   facet_wrap(.~key)

enter image description here