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

ggplot中geom_label_repel/geom_label括号内数字不居中问题求解

解决geom_label/geom_label_repel标签中括号内数字居中的问题

下面提供几种简单可行的解决方法:

方法1:用全角括号替换半角括号

半角括号()的基线设计偏上,和数字基线不匹配,换成全角括号()后,数字会自然和括号居中对齐:

library(tidyverse)
df_cars<- 
  mtcars[2:6,] %>% 
    mutate(CarName = rownames(.),
           # 替换成全角括号
           CarCyl = paste(CarName, " (",cyl,")",sep = ""))

ggplot(df_cars,aes(mpg,hp))+
  geom_point()+
  ggrepel::geom_label_repel(aes(label = CarCyl))+
  theme_bw()

方法2:用ggtext包通过HTML标签调整垂直对齐

如果不想换括号样式,可以用ggtext包支持的HTML语法,强制调整括号内内容的垂直位置:

首先安装并加载ggtext包:

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

然后修改标签文本,用<span>标签设置垂直对齐:

df_cars <- mtcars[2:6,] %>% 
  mutate(CarName = rownames(.),
         CarCyl = paste0(CarName, " <span style='vertical-align: middle;'>(", cyl, ")</span>"))

ggplot(df_cars,aes(mpg,hp))+
  geom_point()+
  ggrepel::geom_label_repel(aes(label = CarCyl),
                            # 开启markdown解析
                            parse = FALSE,
                            label.size = 0.3)+
  theme_bw()

方法3:更换字体

部分等宽字体(比如系统自带的等宽字体)的半角括号和数字基线更匹配,直接换字体也能解决:

library(tidyverse)
df_cars<- 
  mtcars[2:6,] %>% 
    mutate(CarName = rownames(.),
           CarCyl = paste(CarName, " (",cyl,")",sep = ""))

ggplot(df_cars,aes(mpg,hp))+
  geom_point()+
  ggrepel::geom_label_repel(aes(label = CarCyl), family = "mono")+ # 用等宽字体
  theme_bw()

内容的提问来源于stack exchange,提问作者U. Mena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:25:08