如何在 R GUI 中查看 svg 图形弹出

how to see svg graphics pop up in R GUI

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()

我尝试了各种绘图和打印字符串的组合,但都没有成功。任何可以在 R GUI 控制台的弹出窗口中呈现 SVG 的建议?

你至少有两个选择来完成这个:

  1. 创建一个新绘图,读入图像文件,并在绘图上绘制。这将显示在图像设备上,例如 x11、pdf、Rstudio 图像查看器窗格(“绘图”)等,具体取决于您使用的应用程序;请参阅下面的 f

  2. 生成一个html文件到link图像文件。然后可以在默认浏览器或 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')

函数:

## 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)
}