将传单图渲染为 R 中的栅格?

render leaflet plots as raster in R?

我意识到这在很大程度上违背了使用交互式 leaflet 地图的目的,但我正在写一本传统的纸质书,我想展示 R 的 leaflet 包是如何工作的。我正在用 LaTeX 写这本书并用 knitr 渲染。有没有办法将 leaflet 地图渲染为光栅图像,以便将其包含在本书中?

这是一个最小的例子:

library(leaflet)
map <- leaflet() %>%
  addTiles() %>%
  addMarkers(lng = -77.03673, lat = 38.89761)

现在,如果我尝试像这样的块:

<<>>=
map
@

我收到这个错误:

Error in validateCssUnit(sizeInfo$width): "\maxwidth" is not a valid CSS unit
(e.g., "100%", "400px", "auto")

尝试另存为 PNG 也不起作用:

<<>>=
png(filename = "test.png")
map
dev.off()
@

map 不继承自 ggplot,因此 ggsave 也不起作用。

有什么方法可以让它工作吗?

最近有人在 . If you don't mind installing PhantomJS 上提出问题,下面的代码应该可以帮助您从 leaflet(或 mapview) 地图。剩下要做的唯一一件事就是不要在你的书中显示 saveWidgetwebshot 代码,而是导入并显示由此创建的 png 文件。

## install 'webshot' package
library(devtools)
install_github("wch/webshot")

## load packages
library(leaflet)
library(htmlwidgets)
library(webshot)

## create map
m <- leaflet() %>%
  addTiles() %>%
  addMarkers(lng = -77.03673, lat = 38.89761)

## save html to png
saveWidget(m, "leaflet_map.html", selfcontained = FALSE)
webshot("leaflet_map.html", file = "leaflet_map.png",
        cliprect = "viewport")

## optionally display image when using knitr
# p <- knitr::include_graphics("leaflet_map.png")

这里是一些用于演示目的的 LaTeX 输出。如果有人感兴趣,可以从 GitHub.

获得完整的 .Rnw 源文件