【问题标题】:Cant save ggplot graphs while using a loop in R在 R 中使用循环时无法保存 ggplot 图
【发布时间】:2022-12-01 16:43:27
【问题描述】:

出于某种原因,我无法弄清楚,为什么当我运行 ggplot 循环来创建多个图形时,我在环境中看不到它们,因此无法进一步显示图形。 数据样本。

db = data.frame(exposure = sample(1:100, 100),
                   exposure2 = sample(-90:100,100),
                   outcome = sample(200:1000,100))

exposure_vector = c("exposure","exposure2")
exposure_title = c("Pesticide","Apple")
for (i in 1:length(exposure_vector)) {
  current_exposure = db[[exposure_vector[i]]]
  title = exposure_title[i]
  graph_name = paste0(title,"_","Graph")
  graph_name=ggplot(db,aes(x=current_exposure,y=outcome))+geom_smooth()+
    theme_bw()+ylab("outcome")+xlab("exposure")+ggtitle(title)
  print(graph_name)
  
  
}

【问题讨论】:

    标签: r for-loop ggplot2


    【解决方案1】:

    graphname 超出范围。

    您需要在循环外声明它。

    例如

    db = data.frame(exposure = sample(1:100, 100),
                    exposure2 = sample(-90:100,100),
                    outcome = sample(200:1000,100))
    
    exposure_vector = c("exposure","exposure2")
    exposure_title = c("Pesticide","Apple")
    
    plot <- list() #declare
    for (i in 1:length(exposure_vector)) {
      current_exposure = db[[exposure_vector[i]]]
      title = exposure_title[i]
      graph_name = paste0(title,"_","Graph")
      graph_name=ggplot(db,aes(x=current_exposure,y=outcome))+geom_smooth()+
        theme_bw()+ylab("outcome")+xlab("exposure")+ggtitle(title)
      
      plot[[i]] <- graph_name #write
      print(graph_name)
      
      
    }
    

    【讨论】:

      【解决方案2】:

      我假设您想将绘图的值分配给名称为 paste0(title, "_", "Graph") 的变量。如果这是正确的,你应该使用assign

      library(ggplot2)
      
      db <- data.frame(exposure = sample(1:100, 100),
                       exposure2 = sample(-90:100,100),
                       outcome = sample(200:1000,100))
      
      exposure_vector <- c("exposure","exposure2")
      exposure_title <- c("Pesticide","Apple")
      
      for (i in 1:length(exposure_vector)) {
        current_exposure <- db[[exposure_vector[i]]]
        title <- exposure_title[i]
        graph_name <- paste0(title,"_","Graph")
        p <- ggplot(db,aes(x=current_exposure,y=outcome))+
            geom_smooth()+
            theme_bw()+
            ylab("outcome")+
            xlab("exposure")+
            ggtitle(title)
        
        assign(graph_name, p)
        print(p)
      }
      
      ls()
      
      ##> [1] "Apple_Graph"      "current_exposure" "db"               "exposure_title"  
      ##> [5] "exposure_vector"  "graph_name"       "i"                "p"               
      ##> [9] "Pesticide_Graph"  "title"           
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 2020-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多