R 将gvisGeoMap对象保存到png

R 将gvisGeoMap对象保存到png,r,googlevis,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=

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

test_data有很多方法可以进行此操作,但结果不可预测。
一些技巧:

  • 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  &")
    
    print(p, file="p.html")
    system("wkhtmltoimage --enable-plugins --javascript-delay 10000   p.html p.png")
    
    现在使用以下方法打印文件:

    system("DISPLAY=:3 import -window root p.png")
    
    您将以p.png的形式获得该文件。你也可以使用其他浏览器,比如chrome

  • 使用wkhtmltopdf包

    安装wkhtmltopdf并将其置于路径中后,请使用系统调用:

    system("DISPLAY=:3      firefox     g1.html  &")
    
    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
    
    在r中:

    install.packages("webshot")
    appshot("app", "p.png")
    
    你会发现你不会得到flash图表,因为phantomjs现在不支持flash。所以这种方法也是有限的。只有第一种方法可行,但它不是跨平台的。但是你可以在windows中继续使用类似的东西


  • 也许我能帮你,我试过了。正如我所说的,我认为它不可行(至少我尝试时它不起作用,如果我错了请纠正我),因为帖子指的是使用ggvis的导出png。googleVis没有。我发现这里也有人问它,但没有回答:走漫长的路,你可以创建一个非常简单的闪亮应用程序(只需使用你的情节),并从webshot包中获取webshot(使用appshot())。谢谢!我当然希望有一个更直截了当的方法,但如果下周没有新的东西出现,我会接受这个答案。到目前为止,我刚刚在浏览器中打开绘图并打印成pdf。这也很有效,对于有限数量的绘图来说可能是最快的。@JanStanstrup使用wkhtmltopdf包怎么样?它对你有用吗?对我来说,它不适用于flash。但是有些人已经报道成功了。我会在一段时间内尝试一下。我现在就尝试了,而且效果很好(wkhtmltoimage)!只需要记住将wkhtmltoimage添加到PATH或将其指向系统调用中的exe。但我不知道如何获得高分辨率图像。但是wkhtmltopdf也可以工作,所以您至少可以获得它并进行裁剪/转换。虽然不太方便,但很有效。@janstrup欢迎光临。我用你的答复更新了我的答案。