R 使用循环在ggplot中创建具有不同Y轴值的多个绘图

R 使用循环在ggplot中创建具有不同Y轴值的多个绘图,r,for-loop,ggplot2,assign,R,For Loop,Ggplot2,Assign,我试图在ggplot中创建多个散点图,它们具有相同的结构,但具有不同的Y值。我需要将它们分开(因此不使用facet_wrap),因为在后面的步骤中,我使用grid_arrange将不同的图形组合排列到单个布局上 因此,我需要为每个打印创建新名称,以反映正在打印的y值。下面是示例代码,其中month是x轴上的变量,我想要三个单独的month与三个附加变量(lag1_-var、lag3_-var和lag9_-var)的对比图 谢谢你的帮助 我认为您遇到的问题可能是,当您调用以显示每个绘图时,ggpl

我试图在ggplot中创建多个散点图,它们具有相同的结构,但具有不同的Y值。我需要将它们分开(因此不使用facet_wrap),因为在后面的步骤中,我使用grid_arrange将不同的图形组合排列到单个布局上

因此,我需要为每个打印创建新名称,以反映正在打印的y值。下面是示例代码,其中month是x轴上的变量,我想要三个单独的month与三个附加变量(lag1_-var、lag3_-var和lag9_-var)的对比图


谢谢你的帮助

我认为您遇到的问题可能是,当您调用以显示每个绘图时,ggplot试图重新生成每个绘图,并且它从上次给定的引用中检索数据,而不是从创建每个绘图时给定的引用中检索数据。我不完全理解它,所以如果有其他人能够解释这个主题,那就太好了

不管是哪种方式,根据这一推理,我尝试将每个图的数据分离到自己的数据框中,并且似乎已经让它工作了:

library(data.table)
library(ggplot2)
loop.list <- c("1", "3", "9")
for (val in loop.list) {
    col <- grep( paste0("lag", val, "_var"), colnames(df) )
    yval <- df[,c(1,col)]
    setnames( yval, c( "month", "var" ) )
    frameval <- paste0("frame", val)
    assign( paste0("frame", val), yval )
    ptitle <-paste0("graph plot lag", val, "_Var")

    plotval <- ggplot( data = get(frameval), aes(x=month,y=var) ) +
           geom_point( color="red", size=2) +
               ggtitle(ptitle)
    assign( paste0("plot",val), plotval )
}
库(data.table)
图书馆(GG2)

loop.list上面的代码与我使用的一个更改一起工作
names(yval)下面的代码显示了如何使用“multiplot()”函数实现这一点,这里提供了该函数的源代码:

这是我在分析新数据集时经常做的第一步。 希望你会觉得有用


需要注意的一点是:在上述代码中使用
aes(get(strX))
,而不是
aes\u string(strX)
,这通常是在使用
ggplot
时在循环中使用的,不会绘制所需的绘图。相反,它将多次绘制最后一个绘图。我还没有弄清楚原因-它可能必须执行
aes
aes\u字符串
ggplot
setnames
(无大写)是一个
数据表
函数,因此如果附加了包,应该可以工作吗?我经常使用
data.table
table,所以我习惯于使用它的函数,因此我的答案中包含了它。啊,有道理,我刚刚发现了data.table,所以我还不熟悉它的所有函数。谢谢欢迎光临。如果你的问题已经解决了,不要忘记接受答案,这样其他人可以在他们需要的时候找到答案,或者如果他们仍在试图帮助你,就忽略你的问题。
loop.list <- c("1", "3", "9")

for (val in loop.list) {

  yval<- paste0("lag", val, "_var")

  ptitle <-paste0("graph plot lag", val, "_Var")

  assign(paste0("plot", val), ggplot(data=df, aes(x=month, y=get(yval))) 

+geom_point(color="red", size=2) + ggtitle(ptitle))

    }
 for (val in loop.list) {

      assign(paste0("plot", val), ggplot(data=df,aes(x=month,y=get(paste0("lag", val, "_var")))) + 

    geom_point(color="red", size=2) + 

    ggtitle(paste0("graph plot lag", val, "_Var")))

        }
library(data.table)
library(ggplot2)
loop.list <- c("1", "3", "9")
for (val in loop.list) {
    col <- grep( paste0("lag", val, "_var"), colnames(df) )
    yval <- df[,c(1,col)]
    setnames( yval, c( "month", "var" ) )
    frameval <- paste0("frame", val)
    assign( paste0("frame", val), yval )
    ptitle <-paste0("graph plot lag", val, "_Var")

    plotval <- ggplot( data = get(frameval), aes(x=month,y=var) ) +
           geom_point( color="red", size=2) +
               ggtitle(ptitle)
    assign( paste0("plot",val), plotval )
}
library(data.table)
library(ggplot2)
loop.list <- c("1", "3", "9")
for (val in loop.list) {
    col <- grep( paste0("lag", val, "_var"), colnames(df) )
    yval <- df[,c(1,col)]
    **names(yval)<-  c( "month", "var")** 
    frameval <- paste0("frame", val)
    assign( paste0("frame", val), yval )
    ptitle <-paste0("graph plot lag", val, "_Var")

    plotval <- ggplot( data = get(frameval), aes(x=month,y=var) ) +
           geom_point( color="red", size=2) +
               ggtitle(ptitle)
    assign( paste0("plot",val), plotval )
}
plotAllCounts <- function (dt){   
  plots <- list();
  for(i in 1:ncol(dt)) {
    strX = names(dt)[i]
    print(sprintf("%i: strX = %s", i, strX))
    plots[[i]] <- ggplot(dt) + xlab(strX) +
      geom_point(aes_string(strX),stat="count")
  }

  columnsToPlot <- floor(sqrt(ncol(dt)))
  multiplot(plotlist = plots, cols = columnsToPlot)
}
dt = ggplot2::diamonds
plotAllCounts(dt)