如何使用 for 循环生成多个 ggplots

时间:2021-01-21 15:10:25

标签: r ggplot2

我想知道是否有人可以帮助我获取此代码以返回多个图形。我希望每个图形都被标记为“plot_i”(plot_G1、plot_G2)。我不知道如何让我的函数返回这个。任何帮助将不胜感激!

library(lubridate)
library(tidyverse)

#Dummy Data Frame
DateTime <- c("1999/01/01 11:00","1999/01/02 11:00","1999/01/03 11:00","1999/01/01 11:00","1999/01/02 11:00","1999/01/03 11:00","1999/01/01 11:00","1999/01/02 11:00","1999/01/03 11:00")
Step <- c("Condition1","Condition1","Condition1","Condition2","Condition2","Condition2","Condition3","Condition3","Condition3")
G1 <- runif(9)
G2 <- runif(9)
G3 <- runif(9)
G4 <- runif(9)
test_df <- data.frame(DateTime = DateTime, Step = Step, G1 = G1, G2 = G2, G3 = G3, G4 = G4)
test_df$DateTime.lub <- ymd_hm(test_df$DateTime)
test_df

#Want to create a function that will provide graphs for every G1, G2, G3 and G4 and return them! 
list <- colnames(test_df)
list <- list[-c(1,2,7)]
list

#test plot - works
ggplot(data = test_df, aes(x= DateTime.lub, y = G1))+
               geom_line(aes(size = Step))

#Function does not return graph
for (i in list){
    ggplot(data = test_df, aes(x= DateTime.lub, y = i))+
        geom_line(aes(colour = Step))
}

2 个答案:

答案 0 :(得分:1)

试试这个:

library(ggplot2)
#Function does not return graph
for (i in list){
  var <- sym(i)
  print(ggplot(data = test_df, aes(x= DateTime.lub, y = !!var))+
    geom_line(aes(colour = Step))+
    ggtitle(paste0('plot_',i)))
}

答案 1 :(得分:0)

对于使用此功能的其他人,如果您想导出图表,请参见以下内容:

import React, { useState } from 'react';

export default function App(props) {
  const [markdown, setMarkDown] = useState("");
  const updateMarkdown = (markdown) => {
    setMarkDown(markdown);
  }

  return (
    <div className="App">
      <div className="container">
        <div className="row mt-4">
          <div className="col text-center">
            <h1>
              {" "}
              <Badge className="text-align-center" variant="light">
                Markdown Previewer
                </Badge>
            </h1>
          </div>
        </div>

        <div className="row mt-4">
          <div className="col-md-6">
            {" "}
            <div className="col text-center">
              <h4>
                <Badge className="text-align-center" variant="secondary">
                  Markdown Input
                  </Badge>
              </h4>
            </div>
            <div className="input" style={inputStyle}>
              <textarea
                className="input"
                style={inputStyle}
                value={markdown}
                onChange={(e) => {
                  updateMarkdown(e.target.value);
                }}
              >
              </textarea>
            </div>
          </div>

          <div className="col-md-6">
            {" "}
            <div className="col text-center">
              <h4>
                <Badge className="text-align-center" variant="secondary">
                  Preview
                  </Badge>
              </h4>
            </div>
            <div
              style={outputStyle}
              dangerouslySetInnerHTML={{
                __html: marked(markdown),
              }}
            ></div>
          </div>
        </div>
      </div>
    </div>
  )
}