cairoDevice 在 for 循环中使用时会产生黑色图像

问题描述 投票:0回答:2

这可能是 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 的执行提供额外的时间,但它不起作用。

r ggplot2 cairo
2个回答
0
投票

不知道为什么它不起作用,但为什么使用 Cairo 只生成 png 文件? R 已经有一个

png()
设备。


0
投票

我在邮件列表中找到了答案这里

答案是在循环内的绘图上使用

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英寸

© www.soinside.com 2019 - 2024. All rights reserved.