R、 ggplot,循环,用于多个面板
嘿,我正在尝试通过4种不同的情况进行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
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
?