通过一系列qplots的环通过一系列qplots的环(Loop through a series o

2019-05-12 03:06发布

我想通过一系列长期循环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

Answer 1:

至于其他的答案说,包装每个qplot()的调用print()这是[R FAQ 7.22 )。 之所以是ggplot的不会被打印到图形设备,直到print.ggplot叫他们。 print()是一个通用的函数,分派给print.ggplot幕后。

当你在REPL工作(“读-评估-打印循环”,又名壳)前面输入线的返回值会自动通过隐式调用打印到print() 这就是为什么qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)是为你工作。 这是无关的范围或for循环。 如果你把该行其他地方没有直接回到REPL,比如在其他一些返回的功能,那就什么也不做。



Answer 2:

我最近做了类似的事情,我想我会提到帮助的代码两个额外的比特。 我包括在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()


Answer 3:

添加print

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

有关说明见塔维斯陆克文的答案。



文章来源: Loop through a series of qplots
标签: r ggplot2