如何让经vjust调整垂直位置的ggplot2 geom_label()文本居中
ggplot2 geom_label 内部文本偏移修复方案
问题原因
直接使用vjust参数调整标签整体位置时,该参数会同时作用于标签框的位置锚点和标签内部文本的对齐规则,最终导致内部文本出现非预期的偏移。
修复方案
方案1(推荐):使用nudge_y调整标签位置
将位置调整和文本对齐逻辑拆分,nudge_y仅负责整体向上移动标签,不影响内部文本对齐规则,vjust、hjust保持默认值即可保证文本居中。
修改后的完整代码如下:
library(ggplot2) Factor <- c('A', 'B') Y <- c(5, 10) DF <- data.frame(Factor, Y) ggplot(data = DF, aes(x = Factor, y = Y)) + geom_col() + geom_label(aes(label = Y), nudge_y = 1, # 可自定义数值调整标签与柱子顶部的间距 size = 3) + scale_y_continuous(limits = c(0, 15))
方案2:显式指定文本对齐参数
如果需要保留vjust参数调整位置的写法,可额外显式设置对齐参数强制内部文本居中:
library(ggplot2) library(grid) # 若label.padding参数报错可加载该包 Factor <- c('A', 'B') Y <- c(5, 10) DF <- data.frame(Factor, Y) ggplot(data = DF, aes(x = Factor, y = Y)) + geom_col() + geom_label(aes(label = Y), vjust = -1, hjust = 0.5, # 强制水平居中 label.padding = unit(0.2, "lines"), # 调整标签内边距避免文本挤压 size = 3) + scale_y_continuous(limits = c(0, 15))
内容的提问来源于stack exchange,提问作者Daniel Valencia C.
相关产品推荐
相关产品推荐

