график графика в устройстве - PullRequest
0 голосов
/ 14 мая 2018

У меня следующая ситуация: я использую внешнюю команду ( plantuml ) для создания графика.Это делается через R с помощью a (my) package .Полученный график может быть файлом (png, svg, eps, pdf, vdx или LaTeX/Tikz с преамбулой или без нее) или я могу отправить изображение на stdout, используя тот жеформаты.

Теперь я хочу построить этот график как можно более похожим на R, то есть в графическом устройстве.В настоящее время я использую временный файл, который я отображаю с помощью readPNG() и grid::grid.raster(), который работает, но я не настолько доволен этим подходом, так как

  1. Я должен использовать временный файлкоторого я хотел бы избежать, и
  2. это растровый формат, и я бы предпочел векторный формат.

Поэтому мой вопрос:

  1. Есть ли способ отобразить любой из векторных форматов на графическом устройстве в R?
  2. Можно ли перенаправить стандартный вывод (результат вызова plantuml) непосредственно в устройство, не создавая промежуточный файл?

1 Ответ

0 голосов
/ 15 мая 2018

Я бы предложил использовать 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 для генерации данных SVG, которые считываются из STDIN. В вашем случае вы можете заменить это звонком на plantuml.

...