如何将gvis对象从googleVis保存到png?
ggvis具有export_png,但不适用于googleVis。

我看到有几个人问这个,但是真的没有办法吗?

test_data <- data.frame(count=c(1,2,5),group=c("Australia","Austria","China"))

p <- gvisGeoMap(test_data,locationvar='group',numvar='count',options=list(dataMode='regions',colors="['0x0000ff', '0xff0000']"))

plot(p)

最佳答案

有许多方法可以执行此操作,并且结果无法预测。
一些技巧:


Xvfb,imagemagick和浏览器。

您需要安装所有三个。在Windows上将无法使用。我假设您已经安装了xvfb和imagemagick。
您在外壳中启动xvfb服务器:

Xvfb :3 -screen 0 1024x768x24 &


现在在R中
您可以将文件打印为html:

print(p, file="p.html")


现在系统调用:

system("DISPLAY=:3      firefox     g1.html  &")


现在使用以下命令打印文件:

system("DISPLAY=:3 import -window root p.png")


您将获得文件为p.png。您可以使用其他浏览器,例如chrome。
使用wkhtmltopdf包。

安装wkhtmltopdf并将其放入PATH后,请使用系统调用:

print(p, file="p.html")
system("wkhtmltoimage --enable-plugins --javascript-delay 10000   p.html p.png")


结果是不可预测的。有时闪光灯不起作用。有时它适用于某些平台。我无法像第一个解决方案那样进行复制。 (对于OP,此解决​​方案有效。这是一个跨平台解决方案。)
作为闪亮的应用程序,phantomjs和webshot:

假设您已经打印了我给出的文件,请使用以下方法创建一个闪亮的应用程序:

mkdir app # Create App Directory
# Create UI
cat <<- EOF > app/ui.R
library(shiny)

shinyUI(fluidPage(
  titlePanel("Google Chart"),
  mainPanel(
    includeHTML("../g1.html")
  )
))
EOF
# Create server
cat <<- EOF > app/server.R
library(shiny)
shinyServer(function(input, output) {
})
EOF


现在安装phantomjs:

npm install -g phantomjs


在r:-

install.packages("webshot")
appshot("app", "p.png")


您会看到您不会获得Flash图表,因为phantomjs现在不支持Flash。因此,该方法也受到限制。只有第一种方法有效,但不能跨平台使用。但是您可以通过使用等效的东西在Windows中继续使用该方法。

08-28 07:07