将gvisGeoMap对象保存到png

时间:2016-06-09 12:02:22

标签: r googlevis

如何将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)

2 个答案:

答案 0 :(得分:1)

有许多方法可以通过不可预测的结果来解决这个问题。 一些技巧:

  1. Xvfb,imagemagick和浏览器。

    您需要安装所有这三个。这不会在Windows上运行。我假设你已经安装了xvfb和imagemagick。 你在shell中启动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。

  2. 使用wkhtmltopdf包。

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

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

    结果不可预测。有时闪光灯不起作用。有时它适用于某些平台。我不能像我的第一个解决方案一样重现。 (对于OP,这个解决方案很有效。这是一个跨平台的解决方案。)

  3. 闪亮的app,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")
    

    你会发现你没有获得闪存图表,因为幻影现在不支持闪存。所以这种方法也是有限的。只有第一种方法可行,但它不是跨平台的。但是你可以使用相同的东西在windows中继续这种方法。

答案 1 :(得分:0)

截至目前,webshot2 可用。我发布了我的解决方案 here