How to order geom's that overlap within a fill/color? Adding jitter looks too random

Advertisements

Let’s say I have this plot illustrating some odds ratio from a main analysis:

Unfortunately, the geom’s are overlapping and it is difficult to see the full range of the confidence interval.

ggplot(df, aes(x = agegrp, y = or, color = udd)) +
  geom_point(size = 3) +
  geom_segment(aes(x = agegrp, xend = agegrp,
                   y = lower, yend = upper)) +
  theme_bw()

I tried adding some jitter, but it looks too random:

ggplot(df, aes(x = agegrp, y = or, color = udd)) +
  geom_point(size = 3,
             position = position_jitter(width = 0.3, 
                                        seed = 1)) +
  geom_segment(aes(x = agegrp, xend = agegrp,
                   y = lower, yend = upper), 
               position = position_jitter(width = 0.3,  
                                          seed = 1)) +
  theme_bw()

How can I obtain something more ordered, e.g.:

Data

set.seed(1)
df <- data.frame(
  agegrp = rep(c("18-39", "40-69", "70+"), 3),
  udd = c(rep("V", 3), rep("E", 3), rep("G", 3)),
  or = runif(9, min = 1.1, max = 3.9),
  lower = runif(9, min = 0.6, max = 2.7),
  upper = runif(9, min = 3.2, max = 6.7)
)

>Solution :

One option would be to use geom_pointrange with position_dodge:

library(ggplot2)

ggplot(df, aes(x = agegrp, y = or, color = udd)) +
  geom_pointrange(
    aes(
      ymin = lower, ymax = upper
    ),
    position = position_dodge(width = 0.75)
  ) +
  theme_bw()

Leave a ReplyCancel reply