自定义图例中直方图的坐标轴标签
修改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
相关产品推荐
相关产品推荐

