【问题标题】:create a function for barchart and call it in a loop and save all graphs为条形图创建一个函数并循环调用它并保存所有图形
【发布时间】:2016-09-19 12:31:04
【问题描述】:

我需要帮助在一个循环中绘制多个文件。我创建了一个函数来为输入文件包含的 5 列中的两列中的两列绘制这些不同的文件,然后调用该函数

bar.plot <- function( col_name1, col_name2,input_file, lable1, lable2) { 
  
  barplot(col_name1, names.arg = col_name2, xlab = "label1", ylab = "lable2",
          col= "blue", main = "bar plot of average", border = "red")

  box()
    
}
    
#call the function for 10 files
i <- 1
    
for (i in 1:10) {

  filename <- paste("C:/Users/admin/GoogleDrive/Vidya/R/document/Group_", 
                    i, ".csv", sep = "")
  group <- read.csv(filename)
  
  lablex <- "average"
  labley <- "master id"
      
  bar.plot(group$total_pause_time, group$employee_id, group, lablex, labley)
    
}

输出图将xlable 显示为label1,ylable 显示为label2,即使我在lablex 中输入了“average”,在中输入了“ma​​ster idlabley。 还告诉我如何用 10 个不同的名称保存这些不同的图,例如plot1.jpgplot10.jpg

【问题讨论】:

    标签: r loops plot


    【解决方案1】:

    这将创建一个包含十个单独地块的 pdf 文件

        bar.plot <- function( col_name1, col_name2,input_file, lable1, lable2)
    { 
      barplot(col_name1,names.arg = col_name2,xlab=label1,ylab=label2,
    col= "blue",main = "bar plot of average",border = "red")
      box()
      }
    
    #call the function for 10 files
    label1 <- "average"
    label2 <- "master id" 
    
    setwd("C:/Users/admin/GoogleDrive/Vidya/R/document/Group_/")
    filename <- list.files(pattern = ".csv")
    myfiles <- lapply(filename, read.csv)
    
      for (i in myfiles)
        {
        group    <- data.frame(myfiles[i])
        jpeg(paste(i,".jpg"))
      bar.plot(group$total_pause_time,group$employee_id,label1,label2)
      dev.off()
      }
    

    【讨论】:

    • 嗨,此代码将所有绘图保存在单个 pdf 中,但标签仍然不是“平均和主 ID”
    • @vidyanair 希望这对您有所帮助
    • kumar 好的..我会试试的
    • @vidyanair 根据您的 jpeg 图更新每个图
    • @arun..它工作正常谢谢..还有一件事..我如何增加 main = "..." 相对于 i .. 例如对于平均1的条形图,平均2的条形图............平均10的条形图
    【解决方案2】:

    试试这个:

    bar.plot <- function( col_name1, col_name2,input_file, lable1, lable2) {
    barplot(col_name1,names.arg = col_name2, xlab = lable1, ylab = lable2,
    col= "blue",main = "bar plot of average",border = "red")
    box()
    }
    
    #call the function for 10 files
    for (i in 1:10){
    filename <-paste("C:/Users/admin/GoogleDrive/Vidya/R/document/Group_",i,".csv",sep = "")
        group    <- read.csv(filename)
    lable1 <- "average"
    lable2 <- "master id"
    bar.plot(group$total_pause_time,group$employee_id, group, lable1, lable2)
    dev.copy(jpg,paste("C:/Users/admin/GoogleDrive/Vidya/R/document/plot",i,".jpg)
    dev.off()
    }
    

    【讨论】:

    • 不工作..仍然显示 lable1 和 lable2 而不是“平均”和“主 ID”..并且 jpg 未保存..
    • 如果这些文件,group1 到 group10 已经在全局环境中显示了,那么就不需要做 read.csv 了。在这种情况下怎么做..意味着我直接想导入这些文件从全球环境同时增加他们的名字 lfom group1 到 group10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多