【问题标题】:plot graph in device在设备中绘制图形
【发布时间】:2018-05-14 07:33:32
【问题描述】:

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

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

  1. 我必须使用一个我想避免使用的临时文件,并且
  2. 这是一种光栅格式,我更喜欢矢量格式。

因此我的问题是:

  1. 有没有办法在 R 的图形设备中显示任何矢量格式?
  2. 我能否将 stdout(调用 plantuml 的结果)直接通过管道传输到设备,而无需创建中间文件?

【问题讨论】:

    标签: r graphics pipe


    【解决方案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 的调用。

    【讨论】:

    • 这听起来很有希望,尤其是因为我也可以避免临时文件。我会试试这个。并让您知道。
    • @Rainer 我对结果很感兴趣。如果plantuml 可以在 R-markdown 文档中使用会很酷。
    • 好的 - 我刚刚推送了 0.2.0 版。它使用 svg 作为中间格式。它部分适用于 RStudio(图表在 knitted 文档中),但我不知道为什么它们没有显示在 .Rmd 文档中。欢迎提出任何建议。
    • 出于兴趣:你为什么推荐 svg 而不是 eps?有什么具体原因吗?
    • @Rainer 我的印象是,grImports2 目前正在开发中,而且这只是 SVG。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多