在ggplot2绘图中添加注释,使其位置动态/相对于另一个元素的位置

4
我正在尝试向一个使用ggplot2和R语言绘制的柱状图中添加注释(标签),并使其相对于另一个元素,即在柱状图中的一个条形上方。我希望将其作为软件包的一部分实现,因此下面的示例有些牵强,但我希望它能够展示出具体挑战。首先,我尝试了以下方法,通过将标签放置在y变量值的基础上(这样标签就会出现在条形之上),再加上y变量值的5%来定位标签。
library(ggplot2)

d <- data.frame(x = c("var1", "var2"), y = c(.2, 4))

ggplot(d, aes(x = x, y = y)) +
    geom_col() +
    annotate("text", x = d$x, y = d$y + (.05 * d$y), label = "hi!")

接近成功,但还没到位。如果我将此值增大超过5%,则较大的y值对应的条形上的标签会离该条形太远,而如果我将此值减小超过5%,则标签会靠得太近(并与)条形重叠。

我尝试对y值进行平方根操作:

ggplot(d, aes(x = x, y = y)) +
    geom_col() +
    annotate("text", x = d$x, y = d$y + sqrt(.05 * d$y), label = "hi!")

这种方法在大多数情况下都有效,但在极端情况下可能会出现问题(标签到达条形图顶部的位置),因此我想知道是否有一种更通用的方法以一种更动态的方式相对于另一个元素的位置添加标签(或其他ggplot2注释)。


1
geom_text()vjust如何搭配使用?ggplot(d, aes(x = x, y = y)) + geom_col() + geom_text(aes(label = "hi!"), vjust = -0.5) - Mike H.
1个回答

3
您可以尝试在geom_text()中使用vjust
ggplot(d, aes(x = x, y = y)) +
  geom_col() + geom_text(aes( label = "hi!"), vjust = -0.5)

即使在极端情况下,也应该能够很好地工作:

d <- data.frame(x = c("var1", "var2"), y = c(.2, 100))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接