这可能是 cairoDevice 包的错误。我正在使用这个包来生成抗锯齿图以达到美观目的。
以下简化代码在作为 for 循环运行时不起作用:
for (j in 1:4) {
Cairo(
width = 12,
height = 4,
file = paste0("Test", j, ".png"),
surface = "png"
)
qplot(1:j)
dev.off()
}
上述代码的结果是 4 个全黑的 .png 图像,尺寸为 12x4。
但是通过简单地选择循环的内容来运行,它工作得很好(需要通过在控制台中将 j 加 1 来手动迭代)。
看来 Cairo() 根本不喜欢 for 循环。我尝试使用 Sys.sleep(2) 为 cairo 的执行提供额外的时间,但它不起作用。
不知道为什么它不起作用,但为什么使用 Cairo 只生成 png 文件? R 已经有一个
png()
设备。
我在邮件列表中找到了答案这里。
答案是在循环内的绘图上使用
show()
。我相信print()
也可能有效。
例如
for (j in 1:4) {
Cairo(
width = 12,
height = 4,
file = paste0("Test", j, ".png"),
surface = "png"
)
img <- qplot(1:j)
show(img)
dev.off()
}
引用邮件列表中的全文(来源:Douglas Bates)“您观察到的行为[原文如此]是由于在循环中调用点阵图形函数所致。当在循环中调用时,您必须“打印”或“显示“点阵图形函数的结果。请参阅常见问题解答 7.22英寸