我有以下情况:我使用外部命令(plantuml(来创建图形。这是通过使用(我的(包通过 R 完成的。生成的图形可以是文件(png
、svg
、eps
、pdf
、vdx
或LaTeX/Tikz
,有或没有前导码(,或者我可以使用相同的格式将图像发送到stdout
。
现在我想尽可能像R一样绘制这个图,即在图形设备中。目前我正在使用一个临时文件,我使用readPNG()
和grid::grid.raster()
显示它有效,但我对这种方法不太满意
- 我必须使用我想避免的临时文件,并且
- 它是一种光栅格式,我更喜欢矢量格式。
因此,我的问题是:
- 有没有办法在 R 中显示图形设备中的任何矢量格式?
- 我可以将 stdout(调用
plantuml
的结果(直接传送到设备中而无需创建中间文件吗?
我建议使用grImport或grImport2。前者支持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
。