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
相关产品推荐
相关产品推荐

