在ggplot中,我想用星号('*')标记一些错误条以指示显着性级别 . 图表在y轴上排列有类别标签,因此它们易于辨认 . 这意味着误差线是水平的,并且 *
's need to align vertically with them. However, the symbol ' *'不是垂直居中的文本行,因此使用 geom_text
绘制得太高 .
Reproducible example
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来绘制星号 . 虽然这解决了垂直对齐问题,但它引入了自己的问题,即使水平行的星号之间的间距正确(即,使用相邻符号之间的正确间隔来打印''和'*') .
1 回答
只是在我的机器上看它,看起来这个
vjust
调整似乎工作,我认为它可能相当强大的设备输出大小,字体大小等的变化 .