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

时间:2016-02-20 18:20:27

标签: r leaflet knitr r-markdown

我意识到这在很大程度上违背了使用交互式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也无法继续工作。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:8)

How to save Leaflet in RStudio map as png or jpg file?最近有一个问题。如果您不介意安装PhantomJS,下面的代码可以帮助您从传单(或 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源文件。

LaTeX