首页 文章

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

提问于
浏览
1

在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')

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 回答

  • 1

    只是在我的机器上看它,看起来这个 vjust 调整似乎工作,我认为它可能相当强大的设备输出大小,字体大小等的变化 .

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

相关问题