【问题标题】:Saving a tmap with a basemap as an image?将带有底图的 tmap 保存为图像?
【发布时间】:2019-12-05 05:48:22
【问题描述】:

我使用 tmap 在 R 中创建了一个带有底图的地图,并希望将其保存为图像。

每当我使用 tmap_save 将其保存为 .png 时,我都会丢失底图。

大概是因为底图在绘图模式下不可见,仅在视图模式下可见。

有没有将地图和底图一起保存为图像的好方法?

我有一个解决方法,首先将其保存为 HTML,但这不是一个很好的解决方案。

【问题讨论】:

  • 如果您提供一个包含我们可以访问的数据的示例,我们将更容易提供帮助。我遇到了类似的问题,但我最终使用ggplot 进行绘图,使用ggmap 获取底图。但如果在tmap 中可行,我会很感兴趣

标签: r tmap


【解决方案1】:

我在尝试创建静态地图时遇到了类似的问题。我发现 tmaptools::read_osm 函数似乎为我解决了这个问题。这是三个地图的可重现示例:

  • map_a 看起来不错,直到你保存它
  • map_b 一点也不好看
  • map_c 看起来不错,即使已保存

在交互式视图中创建示例地图。但是在保存的文件中,底图没有出现。

library(tmaptools) 
library(tmap)
data(metro)

tmap_mode("view")
map_a <- tm_basemap("OpenStreetMap.Mapnik") +
  tm_shape(metro) +
  tm_bubbles(size = "pop2020", col = "red") 
map_a
tmap_save(map_a, filename="map_a.png")

尝试创建一个类似地块的地图,但是底图根本不出现,而且红点在没有地图的情况下浮动。

tmap_mode("plot")
map_b <- tm_basemap("OpenStreetMap.Mapnik") +
  tm_shape(metro) +
  tm_bubbles(size = "pop2020", col = "red") 
map_b
tmap_save(map_b, filename="map_b.png")

这里有一个解决方案:使用 read_osm。底图出现并可以保存。

c_osm <- tmaptools::read_osm(bb(metro), ext = 1.05)
map_c <- tm_shape(c_osm) +
  tm_rgb() +
  tm_shape(metro) + 
  tm_bubbles(size = "pop2020", col = "red") 
map_c
tmap_save(map_c, filename="map_c.png")

【讨论】:

  • 我刚才跑了代码。我在第三个选项上遇到了一个错误,但通过在处理 read_osm 之前添加对“bb”的调用来解决它。除此之外,气泡似乎在渲染。我还尝试了@rm1104 发布的解决方案中提供的 mapshot() 选项,它对我有用。
  • 的最后一个解决方案很棒!
【解决方案2】:

另一种选择是保存tmap object as a leaflet 对象,然后使用mapview package 中的mapshot() 函数将其保存为图像。下面是一个例子。

library(mapview)
#May need this for mapshot to work
#webshot::install_phantomjs()

data("World")

map <- tm_basemap(leaflet::providers$Esri.WorldTopoMap) + 
tm_shape(World) + tm_polygons(alpha = 0,border.col = "black", lwd = 2)

lf <- tmap_leaflet(map)
mapshot(lf, file = "world_map.png")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2019-11-16
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2021-05-13
    • 2023-03-19
    相关资源
    最近更新 更多