как увидеть всплывающую графику svg в R GUI - PullRequest
0 голосов
/ 01 августа 2020
library(rsvg)


str <- charToRaw('<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
  <style>
    circle {
      fill: gold;
      stroke: maroon;
      stroke-width: 10px;
    }
  </style>

  <circle cx="150" cy="150" r="100" />
</svg>')

rsvg_png(str, file = 'ex1.png') # repeat. I want to remove the save but render on GUI

Как разместить изображение во всплывающем окне? Каждый раз, когда я вношу изменения, мне нужно сохранять изображение, открывать его и повторять. с ggplot2, если есть объект графика после его ввода на консоли GUI, отображается изображение.

Я пробовал

str

plot.new()
str
dev.off()

Я пробовал различные комбинации сюжета и печати строки, но тщетно. Есть ли предложения, которые могут отображать SVG во всплывающем окне с консолью R GUI?

1 Ответ

1 голос
/ 01 августа 2020

У вас есть как минимум два варианта sh этого:

  1. создать новый график, прочитать в файле изображения и нарисовать его на графике. Это будет отображаться на устройстве изображения, например, x11, pdf, панели просмотра изображений Rstudio («Графики») и т. Д. c в зависимости от того, какое приложение вы используете; см. f ниже

  2. создать файл html для ссылки на файл изображения. Затем его можно открыть в браузере по умолчанию или на панели просмотра Rstuio («Средство просмотра»), в зависимости от того, что вы используете; см. g ниже

library('rsvg')
str <- charToRaw('<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
  <style>
    circle {
      fill: gold;
      stroke: maroon;
      stroke-width: 10px;
    }
  </style>

  <circle cx="150" cy="150" r="100" />
</svg>')

rsvg_png(str, file = '~/desktop/ex1.png')

## open in the R/RGui/Rstudio image viewer
f('~/desktop/ex1.png')

## open in Rstudio viewer or browser in R/Rgui
g('~/desktop/ex1.png')

enter image description here

functions:

## image viewer
f <- function(img) {
  img <- png::readPNG(img)
  plot.new()
  plot.window(0:1, 0:1, asp = 1)
  rasterImage(img, 0, 0, 1, 1)
}

## html viewer/browser
g <- function(img, use_viewer = TRUE) {
  file.copy(img, tempdir(), overwrite = TRUE)
  tmp <- tempfile(fileext = '.html')
  writeLines(sprintf('<img src="%s"> ', basename (img)), con = tmp) if (use_viewer) tryCatch (rstudioapi :: viewer (tmp), error = function (e) browseURL (tmp)) else browseURL (tmp)} 
...