如何用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
相关产品推荐
相关产品推荐

