R 使用循环在ggplot中创建具有不同Y轴值的多个绘图
我试图在ggplot中创建多个散点图,它们具有相同的结构,但具有不同的Y值。我需要将它们分开(因此不使用facet_wrap),因为在后面的步骤中,我使用grid_arrange将不同的图形组合排列到单个布局上 因此,我需要为每个打印创建新名称,以反映正在打印的y值。下面是示例代码,其中month是x轴上的变量,我想要三个单独的month与三个附加变量(lag1_-var、lag3_-var和lag9_-var)的对比图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试图重新生成每个绘图,并且它从上次给定的引用中检索数据,而不是从创建每个绘图时给定的引用中检索数据。我不完全理解它,所以如果有其他人能够解释这个主题,那就太好了 不管是哪种方式,根据这一推理,我尝试将每个图的数据分离到自己的数据框中,并且似乎已经让它工作了:
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)