我想循环遍历一系列qplots
或ggplot2
图,暂停每一个图,以便我可以在继续之前检查它。
以下代码不产生图:
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
?
答案 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的回答。