在ggplot中垂直对齐星号(星号)

时间:2018-01-31 22:38:45

标签: r ggplot2

在ggplot中,我想用星号('*')标记一些错误条以指示显着性级别。图表在y轴上排列有类别标签,因此它们易于辨认。这意味着误差线是水平的,*需要与它们垂直对齐。但是,符号'*'不是垂直居中的文本行,因此使用geom_text将其绘制得太高。

可重复的示例

set.seed(123)
x = data.frame(grp = LETTERS[1:8], val = sample(10,8))
se = runif(8, 0.1,2)
x$upper = x$val + se
x$lower = x$val - se
x$labs = sample(c('*','**', '***', ''), 8, T)

gg = ggplot(x, aes(grp,val)) +
  geom_point() +
  geom_errorbar(aes(ymax = upper, ymin=lower), width=0.3) +
  scale_y_continuous(limits = c(-2,12)) +
  coord_flip()

gg + geom_text(aes(y=upper+0.2, label=labs), size=8, hjust='left')

enter image description here

我知道我可以像这样轻推标签位置:

gg + geom_text(aes(y=upper+0.2, label=labs), size=8, nudge_x = -0.2, hjust='left')

但是,获取nudge_x的正确值需要以临时方式完成,并且正确的值会随着图形输出的大小,字体大小,y等级上的类别数等而变化。是否存在一种让标签自动垂直对齐的方法?我尝试使用geom_point和shape=42而不是geom_text来绘制星号。虽然这解决了垂直对齐问题,但它引入了自己的问题,即使水平行的星号之间的间距正确(即,使用相邻符号之间的正确间隔打印'**'和'***')。

1 个答案:

答案 0 :(得分:1)

只需在我的机器上观看它,看起来这个vjust调整似乎有效,我认为它可能对设备输出大小,字体大小等的变化相当强大。

gg + geom_text(aes(y=upper+0.2, label=labs), size=8, hjust='left',vjust = 0.77)