我有一个像这样的df
data <- data.frame(CAR.HEIGHT = c("LOW","MODERATE","WHOLE"),
OR = c(1.077,1.044,1.050),
up_ci = c(1.099,1.054,1.059),
LOW_ci = c(1.055,1.034,1.041),
N = c(41607,188529,230136))
我用ggplot2创建了一个森林图。代码如下。
library (ggplot2)
library(reshape2)
library(forcats)
pos.x <- 1.4
gg<- data %>%
mutate(CAR.HEIGHT = fct_relevel(CAR.HEIGHT,"WHOLE", "MODERATE", "LOW")) %>%
ggplot(aes(x= OR, y= CAR.HEIGHT,)) +
geom_point(size=6,shape=20) +
geom_vline(xintercept = 1, colour = 'red')+
geom_errorbar(aes(xmin= LOW_ci,xmax= up_ci),width=0.30) +
coord_cartesian(xlim = c(0.80,1.25), expand = FALSE,
clip = 'off') +
geom_text(color='Black',aes(label = 'OR' , x = pos.x-0.27, y = 3.9),
hjust = 1.3,size=3.3) +
geom_text(position = position_dodge(width = 0.3),color='Black',
aes(label = paste(round(OR,3)), x =pos.x-0.285,
y = CAR.HEIGHT),
hjust = 0,size=3.3) +
geom_text(color='Black',aes(label = '95% CI' , x = pos.x-0.25, y = 3.9),
hjust = 0,size=3.3) +
geom_text(position = position_dodge(width = 0.6),color='Black',
aes(label = paste("(",round(LOW_ci,2),', ',round(up_ci,2),")",sep=''),
x =pos.x-0.25, y = CAR.HEIGHT),
hjust = 0,size=3.3) +
geom_text(color='Black',aes(label = 'N' , x = pos.x-0.201, y = 3.9),
hjust = 0,size=3.3) +
geom_text(position = position_dodge(width = 0.6),color='Black',
aes(label = paste(round(N,3)), x =pos.x-0.234,
y = CAR.HEIGHT),
hjust = -1.21,size=3.3) +
xlab("TEST CAR")+ ylab("CAR HEIGHT")
然而,由于某些原因,第N列中的数据之一(41607)与其它数据没有对齐成一条直线。
我已经分别更改了hjust,但问题仍然存在。任何关于如何绕过这个问题的想法都将不胜感激。
1条答案
按热度按时间lskq00tm1#
您应该避免使用
hjust
来调整标签的位置。使用x和y坐标确定您希望文本放置的点,然后使用hjust
确定如何相对于该点放置文本:对于左对齐使用hjust = 0,对于居中使用hjust = 0.5,对于右对齐使用hjust = 1。虽然你可以将
hjust
设置为其他值来移动字符串,但是文本移动的量总是与字符串的长度有关,所以如果你有不同大小的字符串,即使它们的hjust设置为相同的值,它们也会移动不同的量。你可能用错了。只需使用
x
美学(或position_nudge
)来指定文本的位置和对齐方式。请注意,如果要为表格标题添加文本注解,那么使用
annotate
而不是geom_text
会更容易,并且需要的代码更少;请注意,下面的代码比原始代码短得多: