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

use*_*704 3 r tmap

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

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

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

是否有一种很好的方法将带有底图的地图另存为图像?

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

rm1*_*104 7

另一种选择是将tmap对象保存为leaflet对象,然后使用mapview包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")
Run Code Online (Sandbox Code Playgroud)


Ara*_*ran 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")
Run Code Online (Sandbox Code Playgroud)

尝试创建与图类似的地图,但根本不会出现底图,并且红点会在没有地图的情况下浮动。

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")
Run Code Online (Sandbox Code Playgroud)

这是一个解决方案:使用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")
Run Code Online (Sandbox Code Playgroud)