循环通过一系列qplots

时间:2011-10-19 16:23:49

标签: r ggplot2

我想循环遍历一系列qplotsggplot2图,暂停每一个图,以便我可以在继续之前检查它。

以下代码不产生图:

library(ggplot2)
par(ask=TRUE)
for(Var in names(mtcars)) {
    qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)
}

但如果我在运行循环后运行此行,我会得到一个情节:

qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)

这种行为的原因是什么?如何在循环中显示绘图?

跟进: 有没有比使用mtcars[,Var]xlab=Var

更优雅地循环变量的方法

3 个答案:

答案 0 :(得分:11)

正如其他答案所述,请在qplot()中填写每个print()来电(这是R FAQ 7.22)。原因是在调用print.ggplot之前,ggplot不会打印到图形设备上。 print()是一个通用函数,在后台调度到print.ggplot

当您在repl中工作时(“read-evaluate-print loop”,又名shell),前一个输入行的返回值将通过对print()的隐式调用自动打印。这就是为什么 qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)正在为你工作。它与范围或for循环无关。如果你将那行放在其他没有直接返回到repl的地方,比如在一个返回别的东西的函数中,它什么都不做。

答案 1 :(得分:6)

我最近做了类似的事情,并且认为我会提到另外两个有用的代码。我在for循环中包含了这一行,以便在打印每个绘图后让R暂停片刻(在这种情况下,半秒):

Sys.sleep(0.5)

或者,您可以直接将它们保存到文件中,然后在闲暇时浏览它们,而不是在屏幕上查看图形。或者在我的情况下,我试图动画我们跟踪的蜜蜂的轨迹,所以我将图像序列导入ImageJ并将其保存为GIF动画。

library(ggplot2)
png(file="cars%d.png")
for(Var in names(mtcars)) {
print(qplot(mtcars[,Var], wt, data=mtcars, xlab=Var))
}
dev.off()

答案 2 :(得分:5)

添加print

library(ggplot2)
par(ask=TRUE)
for(Var in names(mtcars)) {
    print(qplot(mtcars[,Var], wt, data=mtcars, xlab=Var))
}

有关解释,请参阅Tavis Rudd的回答。