Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R、 ggplot,循环,用于多个面板_R_Loops_Ggplot2_Panels - Fatal编程技术网

R、 ggplot,循环,用于多个面板

R、 ggplot,循环,用于多个面板,r,loops,ggplot2,panels,R,Loops,Ggplot2,Panels,嘿,我正在尝试通过4种不同的情况进行ggplot循环,我有一个包含5个变量的数据,我想绘制出所有点、回归线,并在图中添加y=ax+b,以及r^2。所有图均以4个面板的方式绘制。我使用print(do.call(grid.arrange,plot)最后,它将在同一个绘图中生成4个面板 如果我注释掉这一行,它将生成: 正如你所看到的,散点图是不同的。我想知道为什么会发生这种情况。而且,y=ax+b和r^2看起来很难看,如何清理 谢谢你的帮助 lm_eqn1 <- function(df,x

嘿,我正在尝试通过4种不同的情况进行
ggplot
循环,我有一个包含5个变量的数据,我想绘制出所有点、回归线,并在图中添加
y=ax+b
,以及
r^2
。所有图均以4个面板的方式绘制。我使用
print(do.call(grid.arrange,plot)
最后,它将在同一个绘图中生成4个面板

如果我注释掉这一行,它将生成:

正如你所看到的,散点图是不同的。我想知道为什么会发生这种情况。而且,
y=ax+b
r^2
看起来很难看,如何清理

谢谢你的帮助

lm_eqn1 <- function(df,x,y){
  m <- lm(y ~ x, df);
#  eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
#                   list(a = format(coef(m)[1], digits = 2),
#                        b = format(coef(m)[2], digits = 2),
#                        r2 = format(summary(m)$r.squared, digits = 3)))
  eq<-  substitute(italic(y) == b %.% italic(x)+ a,list(a = format(coef(m)[1], digits = 2),b = format(coef(m)[2], digits = 2)))
  as.character(as.expression(eq));
}
lm_eqn2 <- function(df,x,y){
  m <- lm(y ~ x, df);
  eq2<- substitute(italic(r)^2~"="~r2,
                   list(r2 = format(summary(m)$r.squared, digits = 3)))
  as.character(as.expression(eq2));
}

plot = list()
df <-    data.frame(as.vector(data[[1]]),as.vector(data[[2]]),as.vector(data[[3]]),as.vector(data[[4]]),as.vector(data[[5]]))
colnames(df) <- case
p = 1
for (k in 1:1){
  for (j in 2:5){
#    for (p in 1:4){
    x_lab <- paste(case[k]," [ug/m3]",sep=" ")
    y_lab <- paste(case[j]," [ug/m3]",sep=" ")
    x=df[,case[k]]
    y=df[,case[j]]
    print(case[k])
    print(case[j])
    plot[[p]] = ggplot(df,aes(x=x,y=y))+
                geom_point(size=2,alpha = 0.3,color="red")+
                theme_bw(base_size=12, base_family = "Helvetica")+
                xlab(x_lab)+
                ylab(y_lab)+
                theme(aspect.ratio=1)+
                ggtitle(case[j]) +
                geom_smooth(method='lm',se = FALSE, color="black",formula = y ~ x)+
                geom_text(x=-0.0005,y=0.05,label=lm_eqn1(df,x,y),parse = TRUE)+
                geom_text(x=-0.0005,y=0.04,label=lm_eqn2(df,x,y),parse = TRUE)
#    }
     print(plot[[p]])
     p = p + 1
}
}
#print(do.call(grid.arrange,plot))

lm_eqn1Huang。您的脚本对我很有帮助。对于您的问题,如果您在ggplot()的第一行中使用“aes_string()”而不是“aes()”,它将起作用

ggplot(df, aes_string(x=x, y=y))

黄。你的脚本对我很有帮助。对于你的问题,如果你在ggplot()的第一行中使用“aes_string()”而不是“aes()”,它会起作用

ggplot(df, aes_string(x=x, y=y))

对于文本,请使用
annotate
而不是所解释的
geom_text
(1)可能最好将函数从
plot
重命名为另一个名称,因为R中还存在一个
plot
函数。(2)您是否查看了
ggplot2
中的
facet\u wrap
?最好不要使用存在于ggplot2评估帧之外的
d
对象。否则,在评估时可能没有一组正确的x和y值。也许您可以为我们提供一个最小的可复制示例。您的轴似乎是s循环中的ame。为什么不依赖内置的
facet\u wrap
?对于文本,使用
annotate
而不是
geom\u text
(1)可能最好将函数从
plot
重命名为另一个名称,因为R中也存在
plot
函数。(2)您是否查看了
ggplot2
中的
facet\u wrap
?最好不要使用存在于ggplot2评估帧之外的
d
对象。否则,在评估时可能没有一组正确的x和y值。也许您可以为我们提供一个最小的可复制示例。您的轴似乎是same在您的循环中。为什么不依赖内置的
facet\u wrap