Read in data in csv format

df <- read_csv(
  "Variable,Model,Odds,CIHigh,CILow
  Aggregate neighborhood food environment (scale 0-5),Medium tertile of PA (Low referent),1.04,1.14,0.96
  Aggregate neighborhood food environment (scale 0-5),High tertile of PA (Low referent),1.19,1.33,1.07
  Presence of convenience store (vs. absence),Medium tertile of PA (Low referent),1.23,1.69,0.89
  Presence of convenience store (vs. absence),High tertile of PA (Low referent),1.82,2.75,1.20
  Presence of supermarket (vs. absence),Medium tertile of PA (Low referent),1.20,1.62,0.89
  Presence of supermarket (vs. absence),High tertile of PA (Low referent),1.50,2.2,1.02
  Presence of farmer's market/ co-op/CSA (vs. absence),Medium tertile of PA (Low referent),1.03,1.46,0.72
  Presence of farmer's market/ co-op/CSA (vs. absence),High tertile of PA (Low referent),1.53,2.37,0.98
  Presence of fast food restaurant (vs. absence),Medium tertile of PA (Low referent),1.17,1.59,0.86
  Presence of fast food restaurant (vs. absence),High tertile of PA (Low referent),1.61,2.38,1.09
  Presence of non-fast food restaurant (vs. absence),Medium tertile of PA (Low referent),1.07,1.44,0.79
  Presence of non-fast food restaurant (vs. absence),High tertile of PA (Low referent),1.65,2.42,1.12"
  )

Plot multiple sets of response variables as odds ratios on one plot

ggplot(df, aes(x = Odds, y = Variable, color = Model)) +
  geom_vline(aes(xintercept = 1), size = .25, linetype = "dashed") +
  geom_errorbarh(
    data = filter(df, Model == "Medium tertile of PA (Low referent)"),
    aes(xmax = CIHigh, xmin = CILow),
    size = .5,
    height = .1,
    color = "gray50",
    position = position_nudge(y = adj)
  ) +
  geom_point(
    data = filter(df, Model == "Medium tertile of PA (Low referent)"),
    size = 4,
    position = position_nudge(y = adj)
  ) +
  geom_text(data=filter(df, Model=="Medium tertile of PA (Low referent)"),
            aes(label=Odds),
            hjust=0.5, 
            vjust=-2.5, 
            color="black")+
  geom_errorbarh(data = filter(df, Model == "High tertile of PA (Low referent)"),
    aes(xmax = CIHigh, xmin = CILow),
    size = .5,
    height = .1,
    color = "gray50"
  ) +
  geom_point(data = filter(df, Model == "High tertile of PA (Low referent)"), 
             size = 4) +
  geom_text(data=filter(df, Model=="High tertile of PA (Low referent)"),
            aes(label=Odds),
            hjust=.5, 
            vjust=2.2)+
  coord_trans(x = "log10") +
  scale_x_continuous(breaks=c(0.5,0.75,1,1.5,2,2.5,3))+
  theme_bw() +
  theme(panel.grid.minor = element_blank()) +
  scale_colour_manual(values = c("gray3", "gray75")) +
  annotate(
    geom = "text",
    y = .5,
    x = 1.1,
    label = "Model adjusted for age, sex, race/ethnicity, and SES",
    size = 3.5,
    hjust = 0
  ) +
  ggtitle(
    "Figure 1: Multinomial Regression of Neighborhood Food Environment with Physical Activity Levels"
  ) +
  theme(plot.title = element_text(hjust = 2.4))