tmap v.4中tm_layout()的panel.labels参数数学表达式失效如何解决?
在tmap v4中为面板标签添加上标与下标
问题背景
在tmap 3版本中,可通过expression()为面板标签添加数学格式(如上标、加粗),但升级到tmap v4后,运行原有代码出现错误:
Error in bold("Elevation (No. m"^-2 * ")") : could not find function "bold"
原测试代码如下:
library(tmap) library(terra) library(sf) r <- rast(system.file("ex/elev.tif", package="terra")) states <- st_read(system.file("ex/lux.shp", package="terra")) # 调整边界框 bbox_new <- st_bbox(r) xrange <- bbox_new$xmax - bbox_new$xmin yrange <- bbox_new$ymax - bbox_new$ymin bbox_new[1] <- bbox_new[1] - (0.05 * xrange) bbox_new[3] <- bbox_new[3] + (0.05 * xrange) bbox_new[2] <- bbox_new[2] - (0.05 * yrange) bbox_new[4] <- bbox_new[4] + (0.05 * yrange) bbox_new <- bbox_new %>% st_as_sfc() tm_shape(r, bbox = bbox_new) + tm_raster(col.scale = tm_scale_continuous( values = "viridis"), col.legend = tm_legend(title = "Legend", frame.lwd = 0, position = c("LEFT", "BOTTOM"))) + tm_shape(states) + tm_borders() + tm_layout(panel.labels = expression(bold("Elevation (No. m"^-2*")"))) # 测试用的虚拟单位
解决方案
tmap v4对文本格式的处理逻辑发生了变化,不再支持直接在panel.labels中使用expression(),可通过以下两种方式实现需求:
方案1:使用bquote()包裹表达式
bquote()可以保留plotmath的格式语法,直接替换原有expression()部分:
tm_layout(panel.labels = bquote(bold("Elevation (No. m"^-2*")")))
方案2:使用tmap v4推荐的glue-style语法
利用^内容^表示上标,~内容~表示下标,**内容**表示加粗,直接写字符串即可:
tm_layout(panel.labels = "**Elevation (No. m^-2^)**")
替换后重新运行代码,即可生成带有加粗和上标格式的面板标签。
内容的提问来源于stack exchange,提问作者UseR10085
相关产品推荐
相关产品推荐

