【问题标题】:render leaflet plots as raster in R?在R中将传单图渲染为栅格?
【发布时间】:2016-02-20 18:20:27
【问题描述】:

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

有什么办法可以做到这一点吗?

【问题讨论】:

  • dygraphleaflet是基于htmlwidgets。根据this answer by Yihui“您不能在 LaTeX 文档中使用任何基于 htmlwidgets 的包”。但也要阅读 cmets;可能有解决方法。
  • 这很有道理——感谢您的链接。我发现的最佳解决方案是在 RStudio 中渲染,然后使用 Export... 功能并另存为 PNG。

标签: r leaflet knitr r-markdown


【解决方案1】:

最近有一个关于How to save Leaflet in RStudio map as png or jpg file? 的问题。如果您不介意安装PhantomJS,下面的代码应该可以帮助您从leaflet(或ma​​pview)地图创建静态图像。剩下要做的就是不在您的书中显示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 源文件。

【讨论】:

  • 很好的答案。您可以添加knitr::include_graphics("leaflet_map.png"),这是在knitr 文档中使用您的方法所需的唯一附加代码。
  • 你们太棒了。
  • 就是这样@CL。或者直接在 LaTeX 代码中使用 includegraphics (from graphicx) 等,就像我在上面链接的源文件中所做的那样。
  • @fdetsch 我推荐knitr::include_graphics(),因为它与输出格式(LaTeX、Markdown 等)无关。当输出格式不是 HTML 时,我还一直致力于自动化这个对 HTML 小部件进行快照的过程。希望在不久的将来事情会容易得多。
  • 仅供参考,目前knitr的开发版本已经完成了这项工作:github.com/yihui/knitr/blob/master/NEWS.md
猜你喜欢
  • 1970-01-01
  • 2016-10-24
  • 2014-11-20
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2010-12-19
相关资源
最近更新 更多