在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')
我知道我可以像这样轻推标签位置:
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来绘制星号。虽然这解决了垂直对齐问题,但它引入了自己的问题,即使水平行的星号之间的间距正确(即,使用相邻符号之间的正确间隔打印'**'和'***')。
答案 0 :(得分:1)
只需在我的机器上观看它,看起来这个vjust
调整似乎有效,我认为它可能对设备输出大小,字体大小等的变化相当强大。
gg + geom_text(aes(y=upper+0.2, label=labs), size=8, hjust='left',vjust = 0.77)