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

自定义图例中直方图的坐标轴标签

修改tmap地图图例中直方图的坐标轴标签

你需要将tmap绘制的地图图例中直方图的数值坐标轴标签(如500、1500)替换为对应的分类名称,移除原有数值标签,以下是实现方法:

实现步骤与代码

tmap默认的legend.hist参数无法直接修改直方图坐标轴标签,我们可以通过提取绘图对象的grob元素来替换标签,具体代码如下:

library(tmap)
library(grid)

# 为数据添加对应区间的分类变量(用于匹配标签)
merged$obs_category <- cut(merged$aantal_observaties,
                           breaks = c(0, 1000, 2000, 3000),
                           labels = c("1 to 1000", "1001 to 2000", "2001 to 3000"),
                           include.lowest = TRUE)

custom_colors <- c("#ffd500", 'orange', "#e60000")

# 生成原始tmap对象
tm_map <- tm_shape(merged) +
  tm_borders(lwd = NA) +
  tm_polygons("aantal_observaties", 
              id = "pc4", 
              breaks = c(1, 1001, 2001, 3000),
              palette = custom_colors, 
              style = "fixed", 
              title = "Observations", 
              alpha = 1,
              na.color = "#ebebeb",
              legend.hist = TRUE,
              legend.show = FALSE) +
  tm_layout(legend.outside = TRUE, legend.outside.position = "right",
            frame = FALSE,
            title = 'Observations',
            title.size = 1) +
  tm_add_legend(labels = c("1 to 1000", "1001 to 2000", "2001 to 3000", "0"),
                col = c("#ffd500", 'orange', "#e60000", "#ebebeb"),
                border.lwd = NA)

# 获取绘图的grob对象并修改直方图x轴标签
tm_grob <- tmap_grob(tm_map)
# 定位直方图的x轴元素
hist_axis_idx <- which(grepl("axis-b", names(tm_grob$children)))
# 替换坐标轴标签为分类名称
tm_grob$children[[hist_axis_idx]]$children$axis$labels$label <- c("1 to 1000", "1001 to 2000", "2001 to 3000")

# 绘制修改后的图形
grid.draw(tm_grob)

效果说明

修改完成后,直方图的x轴将显示你设定的分类名称(如1 to 1000),替代原来的数值刻度(如500、1500),与你期望的效果一致。

内容的提问来源于stack exchange,提问作者TvCasteren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:21:37