循环为数据框中的变量生成图

loop generate plots for variables in a data frame

所以我有一个数据框,设置有点像这样:

Sample V1  V2 V3  Group1 Group2
bob    12  32  12  G1      G2
susan  43  23  54  G2      G2
mary   23  65  34  G1      G2

我能够单独对每个变量(V1、V2、V3)进行分组箱线图,按 Group1 和 Group2 变量分组,但我的真实数据集有更多变量,单独编码会很乏味。有没有一种方法可以使过程循环,并自动生成和导出绘图? For 循环对我来说仍然是一个晦涩难懂的话题。

这是我用来生成单个图的代码:

png(filename= "filename.jpg")
ggplot(aes(y=data$V1, x=data$Group1, fill=data$Group2), data=data) + geomboxplot()
dev.off()

谢谢!

这里有几种适合您的方法。我猜有一个重复项,但如果您刚刚开始,将这些答案应用到您的数据并不总是那么容易。

library(reshape2)
library(ggplot2)
###create some data
set.seed(100)
n = 500

dat <- data.frame(sample = sample(LETTERS[1:10],n,T),
                  V1 = sample(50,n,T),
                  V2 = sample(50,n,T),
                  V3 = sample(50,n,T),
                  Group1 = paste0("G",sample(3,n,T)),
                  Group2 = paste0("G",sample(5,n,T)))

方法 1:熔化和刻面

dat_m <- melt(dat,measure.vars = c("V1","V2","V3"))

p1 <- ggplot(dat_m, aes(x = Group1,y = value,fill = Group2))+
  geom_boxplot() + facet_wrap(~variable)
p1

如您所见,当分组变量太多时,这是不可行的。

方法 2:每个变量不同 plots/images,仍然使用长数据。我按变量拆分了长数据,并为每个块创建了一个图。当前代码绘制到控制台;文件保存代码被注释掉了。

lapply(split(dat_m, dat_m$variable), function(chunk){
  myfilename <- sprintf("plot_%s.png", unique(chunk$variable))

  p <- ggplot(chunk, aes(x = Group1,y = value,fill = Group2)) +
    geom_boxplot() + labs(title = myfilename)
  p
#   #png(filename = myfilename)
#   print(p)
#   dev.off()

})

第三种方法是使用您感兴趣的列的字符串:

#vector of columns you want to plot
mycols <- c("V1","V2","V3")

#plotting for each column. Not that I've put the 'fixed' variable
#inside aes in the main call to ggplot, and the 'varying' variable
#inside aes_string in the call to boxplot

lapply(mycols, function(cc){
  myfilename <- sprintf("plot_%s.png",cc)
  p <- ggplot(dat, aes(x = Group1,fill = Group2)) +
    geom_boxplot(aes_string(y = cc)) + labs(title = myfilename)
  p
  #   #png(filename = myfilename)
  #   print(p)
  #   dev.off()
})