我想循环一系列qplots或多个ggplot2情节,暂停每一个,以便我可以在继续之前检查它.
以下代码不生成图:
library(ggplot2)
par(ask=TRUE)
for(Var in names(mtcars)) {
qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)
}
Run Code Online (Sandbox Code Playgroud)
但如果我在运行循环后运行此行,我会得到一个情节:
qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?如何在循环中显示图?
跟进:循环变量比使用mtcars[,Var]和更优雅xlab=Var吗?
Tav*_*udd 11
正如其他答案所说,将每个qplot()电话打包print()(这是R FAQ 7.22).原因是ggplot在print.ggplot被调用之前不会打印到图形设备上. print()是一个派生到print.ggplot幕后的通用函数.
当你在repl("read-evaluate-print loop",又名shell)中工作时,前一个输入行的返回值将通过隐式调用自动打印print().这就是qplot(mtcars[,Var], wt, data=mtcars, xlab=Var)为你工作的原因
.它与范围或for循环无关.如果您将该行放在其他未直接返回到repl的其他位置,例如在返回其他内容的函数中,它将不执行任何操作.
我最近做了类似的事情,并且认为我会提到两个有用的代码.我在for-loop中包含了这一行,以便在打印每个绘图后让R暂停片刻(在这种情况下,半秒):
Sys.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接将它们保存到文件中,然后在闲暇时浏览它们,而不是在屏幕上查看图形.或者在我的情况下,我试图动画我们跟踪的蜜蜂的轨迹,所以我将图像序列导入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()
Run Code Online (Sandbox Code Playgroud)
添加print:
library(ggplot2)
par(ask=TRUE)
for(Var in names(mtcars)) {
print(qplot(mtcars[,Var], wt, data=mtcars, xlab=Var))
}
Run Code Online (Sandbox Code Playgroud)
有关解释,请参阅Tavis Rudd的回答.
| 归档时间: |
|
| 查看次数: |
3492 次 |
| 最近记录: |