You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于tmap包的两个技术问题:分置图例与外部添加Logo

tmap包相关问题解决方案

问题1:分别在地图左右两侧放置不同图例

可以通过tm_layout()的legend.position参数传入位置列表,分别指定颜色图例和数字(大小)图例的位置。示例代码如下:

library(tmap)
library(sf)

# 模拟示例数据
set.seed(123)
df <- st_as_sf(
  data.frame(
    x = rnorm(26),
    y = rnorm(26),
    color_group = sample(c("组1", "组2"), 26, replace = TRUE),
    num_value = sample(1:10, 26, replace = TRUE)
  ),
  coords = c("x", "y")
)

# 绘制地图并设置左右图例
tm_shape(df) +
  tm_dots(
    col = "color_group",  # 颜色对应分组变量
    size = "num_value",   # 大小对应数字变量
    legend.col.show = TRUE,
    legend.size.show = TRUE
  ) +
  tm_layout(
    # 第一个元素对应颜色图例位置,第二个对应数字大小图例位置
    legend.position = list(c("left", "center"), c("right", "center")),
    legend.title.size = 1,
    legend.text.size = 0.8
  )

legend.position接受坐标向量(c(x, y),取值0-1或"left"/"right"/"center"等)组成的列表,列表长度需与图例数量匹配,以此实现不同图例的分位置摆放。


问题2:将机构Logo放置在地图bbox外部(下方)

tmap::tm_logo()默认会将Logo置于地图内部,可结合grid包的视口(viewport)或gridExtra包的布局工具,将Logo手动定位到地图下方的外部区域。

方法1:使用grid包手动添加

library(tmap)
library(grid)
library(png)

# 绘制地图时预留底部外边距
map <- tm_shape(df) +
  tm_dots(col = "color_group", size = "num_value") +
  tm_layout(
    outer.margins = c(0.1, 0, 0.2, 0)  # 底部预留20%的外边距空间
  )

# 先绘制地图
tmap_draw(map)

# 读取并绘制Logo到底部中心位置
logo_img <- readPNG("your_logo.png")
logo_grob <- rasterGrob(logo_img, width = unit(0.2, "npc"), height = unit(0.1, "npc"))
pushViewport(viewport(x = 0.5, y = 0.05, just = c("center", "bottom")))
grid.draw(logo_grob)
popViewport()

方法2:使用tmap_arrange上下布局

library(tmap)
library(gridExtra)
library(png)

# 绘制主地图
map <- tm_shape(df) + tm_dots(col = "color_group", size = "num_value")

# 将Logo转为grob对象
logo_img <- readPNG("your_logo.png")
logo_grob <- rasterGrob(logo_img, width = unit(0.8, "npc"), height = unit(0.1, "npc"))

# 上下排列地图和Logo,调整高度比例
tmap_arrange(map, logo_grob, nrow = 2, heights = c(4, 1))

两种方法都能让Logo避开地图区域,固定在下方外部位置。


内容的提问来源于stack exchange,提问作者Inês Moreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:03:19