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

能否使用ggtext实现符号上下叠加绘制?

问题描述

尝试使用ggtext包的geom_richtext创建标签,希望将数字与字母上下叠加显示,但不确定ggtext是否支持该功能。目前仅能通过expression、atop和paste的复杂组合实现预期布局,但更倾向于使用HTML方案,请问有什么思路吗?


现有尝试方案1:使用ggtext的HTML标签

library(tibble)
library(ggplot2)
library(ggtext)

dummy <- tibble(this = "A", that = 1)

my_label1 <- "*p* = 0.05<br>&omega;<sub>*p*</sub><sup>2</sup>: large"

dummy %>%
  ggplot(., aes(this, that)) +
  theme_void() +
  geom_richtext(
    aes(0, 0, label = my_label1),
    size = 10, label.colour = "grey", hjust = 0
    )
#> Warning in text_info(label, fontkey, fontfamily, font, fontsize, cache): unable
#> to translate '&lt;U+03C9&gt;png128.4527559055118' to native encoding
#> Warning in text_info_cache[[key]] <- info: unable to translate
#> '&lt;U+03C9&gt;png128.4527559055118' to native encoding

方案1输出效果

现有尝试方案2:使用expression+atop

my_label2 <- expression(atop(paste(italic("p")," = 0.05 "), paste(omega [italic("p")] ^"2", ": large")))

dummy %>%
  ggplot(., aes(this, that)) +
  theme_void() +
  geom_label(
    aes(0, 0),
    label = my_label2, parse = T, size = 10
    )
#> Warning in is.na(x): is.na() auf Nicht-(Liste oder Vektor) des Typs 'expression'
#> angewendet

方案2输出效果

Created on 2022-11-17 with reprex v2.0.2


解决方案

ggtext支持通过HTML结合CSS布局实现上下叠加的标签效果,完全可以替代expression+atop的复杂写法,具体实现思路如下:

  • 替换HTML实体为Unicode字符:用直接的Unicode希腊字母(比如ω)代替&omega;,解决编码警告问题;
  • 利用HTML标签控制换行与对齐:用<br>实现基础换行,或用<div>配合text-align样式精准控制两行的对齐方式(左对齐、居中、右对齐);
  • 优化文本框样式:通过geom_richtext的参数调整文本框的填充、圆角等,让布局更紧凑美观。

优化后的代码示例

library(tibble)
library(ggplot2)
library(ggtext)

dummy <- tibble(this = "A", that = 1)

# 使用HTML+CSS构建标签,左对齐两行内容
my_label_html <- '<div style="text-align: left;">
  <span>*p* = 0.05</span><br>
  <span>*ω*<sub>*p*</sub><sup>2</sup>: large</span>
</div>'

dummy %>%
  ggplot(aes(this, that)) +
  theme_void() +
  geom_richtext(
    aes(0, 0, label = my_label_html),
    size = 10, label.colour = "grey", hjust = 0,
    fill = NA,  # 去掉背景填充
    label.padding = unit(0, "lines")  # 去掉内边距,让布局更紧凑
  )

这种HTML方案比expression写法更直观,也更容易扩展复杂格式(比如不同颜色、字体大小),完全满足上下叠加的布局需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:41:29