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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:09