我正在使用一个简单的ggplot函数,它在循环外工作正常,但即使迭代值不干扰ggplot函数也不在内部.为什么会这样?
这是我的代码
x=1:7
y=1:7
df = data.frame(x=x,y=y)
ggplot(df,aes(x,y))+geom_point()
Run Code Online (Sandbox Code Playgroud)
有用 !但是如果ggplot在for循环中...
for (i in 1:5) {
ggplot(df,aes(x,y))+geom_point()
}
Run Code Online (Sandbox Code Playgroud)
......它不再起作用了!我错过了什么?
谢谢
我想使用ggplot图形从R中的函数中生成几个图形窗口...
testf <- function(a, b) {
devAskNewPage(TRUE)
qplot(a, b);
# grid.newpage(recording = TRUE)
dev.new()
qplot(a, a+a);
# grid.newpage(recording = TRUE)
dev.new()
qplot(b, b+b);
}
library(ggplot2)
x <- rnorm(50)
y <- rnorm(50)
testf(x, y)
Run Code Online (Sandbox Code Playgroud)
但是,dev.new()和grid.newpage()似乎都没有刷新前面的情节.
我知道,在R中,函数通常只生成他们评估的最后一件事,但我想更好地理解这个过程并了解任何可能的解决方法.
思考?
这是我的问题:我正在循环我的数据。对于循环的每次迭代,我创建了 3 个在同一页面上组织的图,并且我希望每次迭代将一页存储在同一个 pdf 文件中。
我正在使用 ggpubr 包中的 ggarrange (我希望图 3 显示在第二行并跨越 2 列)。
这是我如何进行(在一些测试数据上):
我创建测试数据框:
tt <- data.frame(group=rep(c("A", "B"), 3), value=1:6)
tt2 <- data.frame(x=1:10, y=1:10)
Run Code Online (Sandbox Code Playgroud)
我在对象中创建和存储图:
p1 <- ggplot(tt, aes(x=group, y=value, fill=group)) +
geom_dotplot(binaxis="y")
p2 <- ggplot(tt, aes(x=group, y=value, fill=group)) + geom_boxplot()
p3 <- ggplot(tt2, aes(x=x, y=y)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
这有效:
pdf("test.pdf")
ggarrange(ggarrange(p1, p2),
p3,
nrow=2,
heights=c(2, 1))
dev.off()
Run Code Online (Sandbox Code Playgroud)
这不起作用(它不会引发错误,但 pdf 文件不包含任何页面):
pdf("test.pdf")
for(i in 1:2){
ggarrange(ggarrange(p1, p2),
p3,
nrow=2,
heights=c(2, 1))
}
dev.off()
Run Code Online (Sandbox Code Playgroud)
我想也许嵌套的 ggarrange 可能是一个问题,但这也不起作用:
pdf("test.pdf")
for(i in …Run Code Online (Sandbox Code Playgroud) 我正在生成一个我可以在RMarkdown输出中看到的情节,但每当我试图保存它时,我只得到一个空白(白色)图像.我只是在剧情之前和之后添加以下两行
png("Output.png")
#Plot code
dev.off()
Run Code Online (Sandbox Code Playgroud)
它工作正常.突然它停止了工作.有人可以帮我吗?
当我这样做的时候 pdf
pdf("output.pdf")
#plot code
dev.off()
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
There was error opening this document. This document cannot be opened because it has no pages.
Run Code Online (Sandbox Code Playgroud)
谢谢.