0
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 的建议?

4

1 回答 1

1

您至少有两种选择来完成此操作:

  1. 创建一个新图,读入图像文件,然后在图上绘制它。这将显示在图像设备上,例如 x11、pdf、Rstudio 图像查看器窗格(“绘图”)等,具体取决于您使用的应用程序;见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')

在此处输入图像描述

职能:

## 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)
}
于 2020-08-01T05:25:59.883 回答