将带有底图的tmap保存为图像?

时间:2018-09-06 16:23:41

标签: r tmap

我已经使用tmap和底图在R中创建了一个地图,并希望将其另存为图像。

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

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

是否存在将底图与地图另存为图像的好方法?

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

2 个答案:

答案 0 :(得分:5)

我在尝试创建静态地图时遇到了类似的问题。我发现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(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")

答案 1 :(得分: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")