【问题标题】:Is there any alternative method to export ggvis to PNG, rather than export_png()?有没有其他方法可以将 ggvis 导出为 PNG,而不是 export_png()?
【发布时间】:2016-08-19 14:21:55
【问题描述】:

我想知道是否有人知道将 ggvis 对象导出到 PNG 的任何替代方法。可以在 Linux 或 Windows 上实现。

谢谢

【问题讨论】:

  • 如果找不到方法,我只会截屏并裁剪它
  • 我的目标是以编程方式进行。我想使用 knitr 将绘图嵌入到文档中。

标签: r ggvis


【解决方案1】:

我找到了几种方法,我发布了一种更直接的方法。

必需的库

library(ggvis)
library(XML)
library(webshot)
library(htmltools)

生成 ggvis 并打印 HTML 本地目录

outfile <- mtcars %>% ggvis(~wt, ~mpg) %>% layer_smooths() %>% set_options(width = 1200, height = 800)  %>% view_static() %>% html_print( background = "white", viewer = getOption("viewer", utils::browseURL))

将 HTML 解析为字符向量

webst <- htmlParse(outfile, asText=FALSE)
showMethods(class=class(webst), where=search())
webst <- as(webst, "character")
class(webst)

使用正则表达式在 HTML 代码中搜索 SVG 对象的名称/生成 HTML 选择器

id <- webst %>% sub(pattern = "-container.*", replacement ="") %>% sub(pattern = ".*plot_", replacement ="") 
selec <- paste0("#plot_", id, " > div > svg")

使用 Webshot 截取浏览器的屏幕截图。

webshot(outfile, "test_webshot8.png",  selector = selec)

输出

如果您对如何简化或更好的方法有任何建议,我们将不胜感激。

【讨论】:

  • 即使您使用 knitr 将其包含在 pdf 中,它也可以工作,尽管您会失去任何交互性。我希望 knitr 和 ggvis 尽快解决这个问题。我们不想写很长的代码来打印一个图形。
  • 似乎只是 outfile % ggvis(~wt, ~mpg) %>% layer_smooths() %>% set_options(width = 480, height = 360) %>% view_static () %>% html_print( background = "white", viewer = getOption("viewer", utils::browseURL)) webshot(outfile, "Plot1.png") 有效