If you already use meta::forest(), this vignette shows
how ggmeta compares and how to reproduce familiar
output.
meta::forest() draws directly to a graphics device with
a grid-based layout. ggmeta::ggforest() takes the
same meta object but returns a
ggplot:
library(meta)
m <- metabin(
event.e = c(14, 30, 15, 22), n.e = c(100, 150, 100, 120),
event.c = c(10, 25, 12, 18), n.c = c(100, 150, 100, 120),
studlab = c("Study A", "Study B", "Study C", "Study D"),
sm = "RR"
)
# meta::forest(m) # base-graphics forest plot
ggforest(m) # the same analysis, as a ggplotThe practical difference: everything after ggforest() is
ggplot2. You compose with +, restyle with
theme(), add annotations, and save with
ggsave().
meta::forest() |
ggmeta |
|---|---|
forest(m) |
ggforest(m) |
col.square, col.diamond, … |
theme(), scale_*, layer aesthetics |
rightcols (effect, CI, weight) |
ggforest(columns = TRUE) |
custom leftcols / rightcols |
geom_forest_text() + format_effect() |
xlim, xlab, smlab |
xlim(), labs(), or the xlab
argument |
layout = "JAMA" / "RevMan5" |
layout_jama(), layout_bmj(),
layout_revman5() |
prediction = TRUE |
drawn automatically when available |
| Study weights (square size) | weight-proportional squares by default |
Relabel the axis and add a title. These are ordinary ggplot2 calls:
Add the effect / CI / weight columns — the
rightcols idea — with columns:
For a custom column (say a sample-size column of your own),
reach for geom_forest_text(). tidy_meta()
exposes the same tidy data frame ggforest() builds
internally, so you can align your own text to the rows:
td <- tidy_meta(m)
studies <- td[!td$is_summary, ]
studies$effect_txt <- format_effect(studies$estimate, studies$ci_lower, studies$ci_upper)
ggforest(m) +
geom_forest_text(aes(y = studlab, label = effect_txt), data = studies,
x = 4.2, hjust = 0) +
expand_limits(x = 7)meta::forest() when you want
its exhaustive, print-ready defaults out of the box and don’t need to
restyle.ggmeta when you want a
ggplot you can theme, compose, facet, and drop into an existing ggplot2
workflow — or when you only have a tidy data frame of effect sizes and
no meta object at all (see
vignette("getting-started")).