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

ggplot2实现y轴标题与单位不同字体大小及字体间距优化

解决ggplot2中y轴主标题与单位字体差异化及间距问题

我通过for循环批量生成多张水质图表,再使用cowplot的plot_grid()进行拼接。当前y轴标签占用空间过大,希望将y轴主标题(如Temperature)设置为比单位(如(℃))更大的字体。标签存储在列表中,现有代码仅能显示主标题,设置Calibri字体后还出现间距过大的问题。

原代码片段

标签定义与调用代码:

axisLabels <- list('Temp' = c('Temperature','(℃)'))
labs(x= 'Sampling Site', y= axisLabels[[category]][1])

尝试过的更新代码:

axisLabels <- lapply(axisLabels, function(x) {
  x[[1]] <- paste0("<span style='font-size: 13pt; font-family: Calibri'>", x[[1]])
  x[[2]] <- paste0("<span style='font-size: 10pt;font-family: Calibri'>", x[[2]], "</span>")
  return(x)
})

解决方法

步骤1:加载ggtext包

ggplot默认不解析HTML标签,需要用ggtext包的element_markdown()来渲染带格式的文本:

install.packages("ggtext")
library(ggtext)

步骤2:重构标签格式

将主标题和单位合并为单个带HTML格式的字符串,同时优化排版避免间距问题:

# 同一行显示(节省空间)
axisLabels <- list(
  'Temp' = paste0("<span style='font-size:13pt; font-family:Calibri'>Temperature</span><span style='font-size:10pt; font-family:Calibri'> (℃)</span>")
)

# 若需换行显示,添加<br>并后续调整行高
# axisLabels <- list(
#   'Temp' = paste0("<span style='font-size:13pt; font-family:Calibri'>Temperature</span><br><span style='font-size:10pt; font-family:Calibri'>(℃)</span>")
# )

步骤3:配置ggplot主题

在theme()中设置y轴标签使用element_markdown()渲染,并调整行高控制间距:

ggplot(your_data, aes(x = sampling_site, y = temp_value)) +
  geom_boxplot() + # 替换为你的绘图图层
  labs(x = '采样点', y = axisLabels[[category]]) +
  theme(
    axis.title.y = element_markdown(lineheight = 1.2), # 同一行设为1.2,换行设为0.8缩小间距
    # 其他主题样式设置
  )

关键说明

  • 必须使用ggtext::element_markdown()替代默认的element_text(),否则HTML格式标签会被当作纯文本显示。
  • 合并主标题与单位为单个字符串,解决原列表拆分导致的调用问题。
  • 通过lineheight参数精准控制行间距,解决Calibri字体下的间距过大问题。

内容的提问来源于stack exchange,提问作者Melanie Baker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:01:26