сохранение объекта SVG на диск - PullRequest
0 голосов
/ 10 января 2020

Я работаю с функцией, которая выводит объект SVG. Как я вижу, объект SVG по сути представляет собой строку символов. Мне было интересно, как 1) построить вывод SVG из функции 2) сохранить этот объект SVG на диск с расширением SVG? Я попытался ggsave, но только что привел к ошибке.

Я довольно новичок в обработке SVG, поэтому был бы признателен за любые входные данные. Спасибо!

1 Ответ

2 голосов
/ 10 января 2020

1) Я попробовал это для пакета, который я разрабатывал, и это было не просто. В итоге мне понадобились две библиотеки: rsvg и grImport2. Вот код, который я использовал:

  tfile <- tempfile(fileext = ".svg")
  tfile2 <- tempfile(fileext = ".png")
  cat(svg_code, file=tfile)
  if (requireNamespace("rsvg", quietly = TRUE) && requireNamespace("grImport2", quietly = TRUE)) {
    rsvg::rsvg_svg(svg = tfile, tfile2)
    p <- grImport2::readPicture(tfile2)
    grImport2::grid.picture(p)
  } else {
    if (systemShow == FALSE && outFile == ''){
      warning("The figure cannot be rendered in the plot window. Please, use the arguments outFile and/or systemShow.")
    }
  }
  if (systemShow){
    utils::browseURL(tfile)
  }

Первое условие - в случае, если система не позволяет установить ни один из пакетов. Как видите, сначала нужно записать код svg (svg_code) в файл, в данном случае временный (tfile). Затем rsvg_svg записывает временный файл png (tfile2). Наконец, grImport2::readPicture и grImport2::grid.picture показывают преобразованный файл в окне графика. Я также оставил часть, в которой пользователь может установить логическую переменную (systemShow), и пакет попытается открыть файл в системном средстве просмотра svg по умолчанию.

2) Это гораздо проще. Вам просто нужно записать код в файл в виде текста, например cat(svg_code, file='path_to_file.svg').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...