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()