将 WebGLHeatmap 从 Leaflet.extras 保存到 R 中的 png

Saving a WebGLHeatmap from Leaflet.extras to a png in R

我正在从事一个项目,我想在其中以自动方式从 leaflet.extras 创建和保存 WebGLHeatmap 图像。不幸的是,下面的代码:

map = leaflet(df) %>%
      addWebGLHeatmap(lng=~df$longitude, lat=~df$latitude, opacity= 1 , intensity = .5 ,size = 1000, gradientTexture='deep-sea', data=df)%>%
      addTiles(urlTemplate = map, attribution=attr)

生成所需的图像:

当我尝试使用以下代码在代码中保存图像(我最终需要这样做)时:

saveWidget(map, "tmp.html", selfcontained = F)
webshot("temp.html", file = "new_orleans.png", cliprect = "viewport")

我只剩下下面的图片:

我在 webshot github 页面上打开了一个问题,它的所有者给了我这个 response. I also know a similar issue was addressed on SO last year,但似乎没有任何解决方案。

因为我只看到过使用 webshot 或 mapshot 保存 leaflet.extras 地图的示例(这给了我完全相同的问题),我想知道是否有人遇到过这个问题并成功解决了它通过某种解决方法,或使用我还不熟悉的另一个 R 包。

调用 system 有点麻烦,但我认为您可以使用 RSelenium 和 OS 附带的屏幕截图软件来完成这项工作:

library(leaflet.extras)
library(leaflet)
library(RSelenium)

## addWebGLHeatmap
leaflet(quakes) %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addWebGLHeatmap(lng = ~long, lat = ~lat, size = 60000)

quakeplot <- leaflet(quakes) %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addWebGLHeatmap(lng = ~long, lat = ~lat, size = 60000)
quakeplot

htmlwidgets::saveWidget(quakeplot, "quake.html")

rD <- rsDriver(browser="firefox")
remDr <- rD$client

remDr$navigate(paste0("file://", getwd(), "/quake.html"))

Sys.sleep(5)
system("gnome-screenshot -f test2.png")
remDr$close()

我将文件保存到我当前的工作目录,然后使用 getwd() 在我的浏览器中显示该文件。 Sys.sleep() 调用是因为传单磁贴似乎需要很长时间才能加载(这可能是您原始问题的一部分)。

最终结果:

不完美但还是很不错的!