设备中的绘图图

时间:2018-05-14 07:33:32

标签: r graphics pipe

我遇到以下情况:我使用外部命令(plantuml)来创建图形。这是通过使用a (my) package通过R完成的。生成的图表可以是文件(pngsvgepspdfvdxLaTeX/Tikz,有或没有前导码)或我可以使用相同的格式将图像发送到stdout

现在我想将此图形绘制为尽可能像R一样,即在图形设备中。目前我正在使用一个临时文件,我使用readPNG()grid::grid.raster()显示该文件,但我对此方法并不满意

  1. 我必须使用我想避免的临时文件,
  2. 它是一种栅格格式,我更喜欢矢量格式。
  3. 因此我的问题是:

    1. 有没有办法在R?
    2. 的图形设备中显示任何矢量格式
    3. 我是否可以直接将stdout(调用plantuml的结果)直接输入设备而无需创建中间文件?

1 个答案:

答案 0 :(得分:1)

我建议使用grImportgrImport2。前者支持PostScript,而后者支持SVG。请注意,通常需要对SVG图像进行后处理:

library(magrittr)
infile <- tempfile()
svglite::svglite(infile, width = 10, height = 7)
ggplot2::qplot(mpg, wt, data = mtcars, colour = factor(cyl))
dev.off()

system(paste("cat", infile), intern = TRUE) %>%
  paste0(., collapse = "") %>%
  charToRaw(.) %>%
  rsvg::rsvg_svg(NULL, file = NULL) %>%
  rawToChar(.) %>%
  grImport2::readPicture(.) %>%
  grImport2::grid.picture(.)

上面的示例使用人工cat生成从STDIN读取的SVG数据。在您的情况下,您可以通过调用plantuml来替换它。