Visualization VocabularyDataviz vocabulary
Diagram: forest plot
Drawing: Adrien Taudière (CC0)
ggplot2 example: forest plot
Adrien Taudière (CC0); R code ↓; data: Francis et al. 1955, via HistData (Friendly et al. 2026) (GPL)
Wikidata image: forest plot
James Grellier (CC BY-SA 3.0); Wikimedia Commons; item Q1437217

chart

forest plot

Effects and confidence intervals of several studies aligned.

graphique en forêt

aussi : forest plot

Effets et intervalles de confiance de plusieurs études alignés.

Standard des méta-analyses.

Classification

  • chart
  • points and bubbles › dots and intervals
  • deviation
  • the name evokes: nature

Channels

Attestation

Scientific literature

OpenAlex: 10 330 papers since 1979, 59% in the last five years; mostly in Medicine, Biochemistry, Genetics and Molecular Biology, Decision Sciences; Wikidata

Seminal references

R packages

R code of the ggplot2 example

library(ggplot2)
library(dplyr)
library(HistData)

## Rate ratio of vaccinated children to their controls, with its 95%
## interval on the log scale: 1 / a + 1 / b is the variance of log(ratio).
ratio <- function(a, n_a, b, n_b) {
  r <- (a / n_a) / (b / n_b)
  half <- qnorm(0.975) * sqrt(1 / a + 1 / b)
  c(ratio = r, low = r * exp(-half), high = r * exp(half))
}
trials <- PolioTrials |>
  filter(Group %in% c("Vaccinated", "Placebo", "Controls"))
rows <- bind_rows(lapply(c("Paralytic", "NonParalytic"), function(case) {
  bind_rows(lapply(c("RandomizedControl", "ObservedControl"), function(design) {
    t <- filter(trials, Experiment == design)
    v <- t[t$Group == "Vaccinated", ]
    k <- t[t$Group != "Vaccinated", ]
    tibble(case = case, design = design,
           !!!as.list(ratio(v[[case]], v$Population, k[[case]], k$Population)))
  }))
})) |>
  mutate(label = paste0(ifelse(case == "Paralytic", "Paralytic", "Non-paralytic"), ", ",
                        ifelse(design == "RandomizedControl", "placebo trial", "observed controls")),
         label = factor(label, levels = rev(label)))

p <- ggplot(rows, aes(x = ratio, y = label)) +
  geom_vline(xintercept = 1, colour = "#535353", linewidth = 0.4, linetype = "dashed") +
  geom_errorbar(aes(xmin = low, xmax = high), width = 0.2, orientation = "y", colour = "#9b2367", linewidth = 0.5) +
  geom_point(shape = 15, size = 2.4, colour = "#9b2367") +
  scale_x_log10(breaks = c(0.25, 0.5, 1, 2), labels = c("0.25", "0.5", "1", "2")) +
  labs(title = "The vaccine cut paralytic polio by 62% to 71%",
       subtitle = "Each row is a separate comparison (trial design × form of polio), 1954; rate ratio, vaccinated / controls, with 95% intervals",
       x = "Rate ratio (log scale)", y = NULL,
       caption = "Data: Francis et al. 1955, via the HistData R package") +
  theme_lex_viz(grid = "x", arrows = "")

Sources (6)

2 occurrences in the corpus

Cite this entry

Stable addresshttps://dataviz.adrientaudiere.com/en/term/forest-plot.html

ReferenceTaudière Adrien. 2026. forest plot. In Visualization Vocabulary, version 1.0.0. IdEst. https://dataviz.adrientaudiere.com/en/term/forest-plot.html

BibTeX
@incollection{taudiere2026-forest-plot,
  author    = {Taudière, Adrien},
  title     = {forest plot},
  booktitle = {Visualization Vocabulary},
  year      = {2026},
  version   = {1.0.0},
  publisher = {IdEst},
  url       = {https://dataviz.adrientaudiere.com/en/term/forest-plot.html},
  note      = {CC0 1.0}
}

Page created on 2026-10-13. Text last changed on 2026-11-02. Images last changed on 2026-11-12. Numbers computed on 2026-10-22.