我正在一个项目中,我希望以自动化方式从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。我还知道在SO last year上也解决了类似的问题,但是似乎没有任何解决方案。
由于我只看到过使用webshot或mapshot保存leaflet.extras映射的示例(这给了我完全相同的问题),所以我想知道遇到此问题的任何人是否能够通过某种方式成功解决它解决方法,或者使用另一个我不熟悉的R软件包。
答案 0 :(得分:1)
调用system
可能有点麻烦,但是我认为您可以使用RSelenium和操作系统随附的屏幕截图软件来完成此工作:
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()
进行调用,是因为传单似乎需要永久加载(这可能是您原始问题的一部分)。
最终结果:
虽然不完美,但还算不错!