【发布时间】:2015-05-23 08:45:59
【问题描述】:
我需要在 R 中使用 ggplot2 将 1000 多页绘制到 PDF 文件中。除了以下代码之外,还有更快的方法:
library(ggplot2)
data(diamonds)
pdf("name.pdf", width = 6, height = 6)
for(i in 1:1000) {
p1 <- ggplot(diamonds, aes(x = carat, y = price)) +
geom_point()
print(p1)
}
dev.off()
我的实际情况是这样的;
(1)需要读取一个文件,根据文件每一行的值创建一个data.frame。
(2) 将该文件的每一行绘制为 pdf。
fa <- read.table(file)
pdf(name.pdf, width = 6, height = 4)
for(i in 1:nrow(fa)) {
new.data <- function(i)
p1 <- ggplot(new.data,...) + ...
print(p1)
}
dev.off()
【问题讨论】:
-
您只能在循环外调用一次 ggplot,然后重复调用
print,但不知何故,这似乎不太可能改善实际用例。 ggplot2 中的绘图函数与基础图形和晶格图形相比非常慢,因此您可能会考虑使用更快的绘图范例。 -
同意,并且:根据我的经验,它是渲染图形,而不是构建它,这需要时间(所以即使在这种情况下,将
ggplot移到循环之外也无济于事 - - 但这可以通过基准测试来测试) -
move
ggplotout 在我的情况下不起作用,不同的data frame将在每个循环中传递给ggplot()。对我的问题还有其他建议吗? -
正如@BondedDust 所说:您对ggplot 的依恋程度如何?对于这个特定的例子
plot(price~carat,data=diamonds)(来自base R)或lattice::xyplot(price~carat,data=diamonds)都可以正常工作。 -
@Ben Bolker,我很抱歉遗漏了我案件的细节。在我的帖子中只是一个例子。我的实际是:对于每个循环,我需要创建一个新的
data frame,然后创建一个情节。