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

如何用tm_layout自定义tmap直方图图例?字体设置失效求助

解决tmap中直方图图例字体无法自定义的问题

我懂你遇到的困扰——你设置了legend.text.fontface = 'bold'但完全没作用在直方图图例上,这是因为tmap里的通用图例参数和直方图图例的参数是分开的!

问题根源

tm_layout里的legend.text.fontface和legend.title.fontface只针对主图例(也就是和多边形颜色绑定的那个数值/分类图例),直方图图例有自己独立的配置参数,不会继承这些通用设置。

解决方案:使用tmap原生的直方图图例字体参数

你只需要在tm_layout里添加专门针对直方图图例的字体参数即可:

  • legend.hist.text.fontface:控制直方图的坐标轴文本字体样式
  • legend.hist.title.fontface:控制直方图的标题字体样式(可选)

修改后的完整代码如下:

psp1 <- tm_shape(province) + 
  tm_borders(col = 'black') + 
  tm_shape(county) + 
  tm_polygons(col = '+1 °C', 
              title = 'Changes in %', 
              style = 'pretty', 
              aes.palette = 'div', 
              n=5, 
              legend.hist = TRUE) + 
  tm_compass(north = 0, 
             type = 'arrow', 
             show.labels = 0, 
             position = c('right','top')) + 
  tm_layout(legend.format = list(fun = function(x) formatC(x, digits = 1, format = "f")), 
            legend.outside = TRUE, 
            legend.outside.position = 'bottom', 
            legend.hist.width = 1, 
            legend.hist.height = 0.5, 
            legend.stack = 'horizontal', 
            legend.title.fontface = 'bold', 
            legend.text.fontface = 'bold',  # 作用于主图例文本
            legend.hist.text.fontface = 'bold',  # 新增:作用于直方图图例的轴文本
            legend.hist.title.fontface = 'bold')  # 可选:修改直方图标题字体

备选方案:用grid包修改底层元素(针对旧版tmap)

如果你用的是较旧版本的tmap,原生参数可能不存在,这时候可以借助grid包修改绘制完成后的直方图元素:

# 先绘制地图
print(psp1)
# 修改直方图图例的轴文本为粗体
grid::grid.edit("hist.text", gp = grid::gpar(fontface = "bold"))
# 若要修改直方图标题
grid::grid.edit("hist.title", gp = grid::gpar(fontface = "bold"))

这种方法是直接操作tmap底层的grid绘图元素,灵活性更高,但需要确保元素名称正确(不同版本可能略有差异)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:35:05