我想通过一系列长期循环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
?
至于其他的答案说,包装每个qplot()
的调用print()
这是[R FAQ 7.22 )。 之所以是ggplot的不会被打印到图形设备,直到print.ggplot
叫他们。 print()
是一个通用的函数,分派给print.ggplot
幕后。
当你在REPL工作(“读-评估-打印循环”,又名壳)前面输入线的返回值会自动通过隐式调用打印到print()
这就是为什么qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)
是为你工作。 这是无关的范围或for循环。 如果你把该行其他地方没有直接回到REPL,比如在其他一些返回的功能,那就什么也不做。
我最近做了类似的事情,我想我会提到帮助的代码两个额外的比特。 我包括在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()
添加print
:
library(ggplot2)
par(ask=TRUE)
for(Var in names(mtcars)) {
print(qplot(mtcars[,Var], wt, data=mtcars, xlab=Var))
}
有关说明见塔维斯陆克文的答案。