我有一个功能可以完成任务,然后根据条件进行绘图:
f <- function(n) {
rand <- rnorm(n)
no <- seq_len(n)
df <- data.frame(no=no, rand=rand)
if (n > 10) {
png("plot.png")
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
dev.off()
}
}
f(11)
我在这结尾处得到一个空白的png文件。这是怎么回事?
答案 0 :(得分:17)
根据回复,这里有两个解决方案:
library(ggplot2)
f <- function(n) {
rand <- rnorm(n)
no <- seq_len(n)
df <- data.frame(no=no, rand=rand)
if (n > 10) {
png("plot.png")
print({
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
})
dev.off()
}
}
f(11)
注意:我知道我需要使用print()
,但我尝试这种方式的方式不起作用,因为它没有放在正确的位置。
另外,我之前尝试过ggsave
选项,但这也没有用。当然,它现在也可以。它似乎比使用png()
具有更好的分辨率:
library(ggplot2)
f <- function(n) {
rand <- rnorm(n)
no <- seq_len(n)
df <- data.frame(no=no, rand=rand)
if (n > 10) {
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
ggsave(file="plot.png")
}
}
f(11)
谢谢大家。
答案 1 :(得分:10)
我刚从其他网站(下面提供的链接)了解到。在循环中,您必须显式使用print函数才能使jpeg(),png()函数起作用。 在原始帖子中,您只需添加一行打印(p)。
if (n > 10) {
png("plot.png")
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
print(p)
dev.off()
}
在下面的链接中,它为此提供了一个很好的解释 https://stat545-ubc.github.io/block017_write-figure-to-file.html#despair-over-non-existent-or-empty-figures