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

如何在ggplot2的geom_label_repel中实现标签部分文本加粗及左对齐?

解决方案

方法一:使用ggtext包(推荐,更直观)

ggtext包支持在ggplot2文本元素中解析HTML/markdown语法,能直接满足你的需求:

  1. 安装并加载依赖包:
install.packages("ggtext")
library(ggtext)
library(ggplot2)
library(ggrepel)
  1. 构造带HTML加粗标签的文本:
    假设你从数据集中提取对应内容,只需把目标前缀用<b>包裹:
# 批量生成带格式的标签文本
df$label_text <- paste0(
  "<b>Import:</b> ", df$import_content, "\n",
  "<b>Innovation need:</b> ", df$innovation_content
)
  1. 替换原生图层并设置左对齐:
    用ggtext::geom_label_repel替代原生函数,无需parse=T,直接设置label.hjust = 0实现左对齐:
ggplot(df.pca, aes(x = PC1, y = PC2)) +
  # 原有可视化图层(示例)
  geom_point(data = df.inn3, aes(color = group)) +
  geom_point(data = df.imm3, aes(shape = type)) +
  # 带格式的标签
  ggtext::geom_label_repel(
    aes(label = label_text),
    label.hjust = 0,  # 左对齐
    fill = "white",
    size = 3
  ) +
  theme_minimal()

方法二:使用原生plotmath语法(无需额外包)

如果不想安装新包,可借助ggplot2原生支持的plotmath表达式实现部分文本加粗:

  1. 批量转换为plotmath表达式:
    用bold()函数标记需要加粗的文本,用\n实现换行:
# 生成plotmath表达式向量
df$label_expr <- mapply(function(imp, inn) {
  parse(text = paste0("bold('Import: ') ~ '", imp, "' * '\\n' * bold('Innovation need: ') ~ '", inn, "'"))
}, imp = df$import_content, inn = df$innovation_content, SIMPLIFY = FALSE)
  1. 调用原生图层并启用解析:
    设置parse = TRUE解析表达式,同时用hjust = 0实现左对齐:
ggplot(df.pca, aes(x = PC1, y = PC2)) +
  geom_point(data = df.inn3, aes(color = group)) +
  geom_point(data = df.imm3, aes(shape = type)) +
  geom_label_repel(
    aes(label = label_expr),
    parse = TRUE,
    hjust = 0,
    fill = "white",
    size = 3
  ) +
  theme_minimal()

关键提示

  • 原生geom_label_repel不支持HTML解析,必须使用ggtext包的对应图层才能让<b>标签生效。
  • 左对齐参数在ggtext版本中用label.hjust,原生版本用hjust,可搭配label.padding调整文本与边框的间距。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:42:44