如何将使用 geom_label() 制作的标签的文本居中,其垂直位置已被 vjust 更改? (ggplot2 包)

Posted

技术标签:

【中文标题】如何将使用 geom_label() 制作的标签的文本居中,其垂直位置已被 vjust 更改? (ggplot2 包)【英文标题】:How to center the text of a label made with geom_label() whose vertical position was changed with vjust? (ggplot2 package) 【发布时间】:2021-12-01 04:15:27 【问题描述】:

我用ggplot2 包和geom_col() 函数绘制了列。我使用geom_label() 函数在每列的顶部放置了一个标签,其中包含相应的值。在 geom_label() 函数中,我修改了文本大小 (size = 3) 和标签位置 (vjust = -1),但结果显示标签位于所需位置,但文本偏离中心。

我该如何解决这个问题?

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),
             vjust = -1,
             size = 3) +
  scale_y_continuous(limits = c(0, 15))

【问题讨论】:

【参考方案1】:

我建议使用nudge_y,而不是通过vjust(或hjust)移动标签。

library(ggplot2)

Factor <- c('A', 'B')
Y <- c(5, 10)

DF <- data.frame(Factor, Y)

p <- ggplot(data = DF,
       aes(x = Factor,
           y = Y)) +
  geom_col() +
  scale_y_continuous(limits = c(0, 15))

p + geom_label(aes(label = Y), nudge_y = 1, size = 3)

第二种选择是使用ggtext::geom_richtext,它允许在数据点和标签之间添加一些边距:

p + ggtext::geom_richtext(aes(label = Y), vjust = 0, size = 3, label.margin = unit(5, "pt"))

【讨论】:

以上是关于如何将使用 geom_label() 制作的标签的文本居中,其垂直位置已被 vjust 更改? (ggplot2 包)的主要内容,如果未能解决你的问题,请参考以下文章

使用 geom_label() 添加指向重要点的线

R语言ggplot2使用geom_label()函数添加文本标签的一些操作

将标签绘制为带有边缘而不是圆角的矩形

ggplotly 中 geom_label 的替代方案

R语言可视化及作图7--ggplot2之标签、图例和标题绘制

如何在 PlotWidget 内制作标签?