R语言 图中数据对齐不一致

f4t66c6m  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(345)

我有一个像这样的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,但问题仍然存在。任何关于如何绕过这个问题的想法都将不胜感激。

lskq00tm

lskq00tm1#

您应该避免使用hjust来调整标签的位置。使用x和y坐标确定您希望文本放置的点,然后使用hjust确定如何相对于该点放置文本:对于左对齐使用hjust = 0,对于居中使用hjust = 0.5,对于右对齐使用hjust = 1。
虽然你可以将hjust设置为其他值来移动字符串,但是文本移动的量总是与字符串的长度有关,所以如果你有不同大小的字符串,即使它们的hjust设置为相同的值,它们也会移动不同的量。你可能用错了。
只需使用x美学(或position_nudge)来指定文本的位置和对齐方式。
请注意,如果要为表格标题添加文本注解,那么使用annotate而不是geom_text会更容易,并且需要的代码更少;请注意,下面的代码比原始代码短得多:

data %>%
  mutate(CAR.HEIGHT = fct_relevel(CAR.HEIGHT,"WHOLE", "MODERATE", "LOW")) %>%
  ggplot(aes(OR, 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) +
  annotate('text', pos.x - c(0.27, 0.22, 0.17), 3.9,
           label = c('OR', '95% CI', 'N'), size = 3.3, fontface = 2) +
  geom_text(aes(label = paste(round(OR,3)), x = pos.x - 0.27),
            hjust = 0.5, size = 3.3) +
  geom_text(aes(label = paste0("(", round(LOW_ci,2), ',' , round(up_ci,2),")"),
                x = pos.x - 0.22),
            hjust = 0.5, size = 3.3) +
  geom_text(aes(label = paste(round(N,3)), x = pos.x - 0.17),
            size=3.3, hjust = 0.5) +
  labs(x = "TEST CAR", y = "CAR HEIGHT") +
  coord_cartesian(xlim = c(0.80,1.25), expand = FALSE, clip = 'off')

相关问题