append_table: Append a ggplot2 table to the bottom of a ggplot2 plot

View source: R/append.R

append_tableR Documentation

Append a ggplot2 table to the bottom of a ggplot2 plot

Description

Aligns axes and combines a ggplot2 plot and table into a single plot. Can handle legends.

Usage

append_table(
  plot = NULL,
  table = NULL,
  plot.height = 1,
  table.height = 0.1,
  plot.width = 1,
  extract.legend = TRUE,
  legend.width = 0.2,
  legend.offset = -15
)

Arguments

plot

Required. ggplot2::ggplot() object. If a legend is present, it will be extracted.

table

Required. ggplot2::ggplot object. If a legend is present, it will be removed and ignored.

plot.height

Optional. Numeric. Height of plot relative to table. Defaults to 1.

table.height

Optional. Numeric. Height of table relative to plot. Defaults to 0.1.

plot.width

Optional. Numeric. Width of plot relative to legend. Ignored if no legend present in plot. Defaults to 1.

extract.legend

Optional. Logical. Indicates whether to extract the legend from the plot and reinsert it adjacent to the final combined plot. May be undesired if legend already embedded within the plot area. Defaults to TRUE.

legend.width

Optional. Numeric. Width of legend relative to plot. Ignored if no legend present in plot or 'extract.legend'=FALSE. Defaults 0.2.

legend.offset

Optional. Numeric. Vertical offset of legend. Used to raise or lower. Ignored if no legend present in plot or 'extract.legend'=FALSE. Defaults to -15.

Value

A ggplot2 tableGrob object. Use grid::grid.draw() to open in RStudio viewer. Works with ggplot2::ggsave() out of the box.

Note

To ensure proper alignment, double check that both plots use the same scale and breaks!

Examples

library(survival)
library(ggplot2)
library(broom) # tidy() model data
library(grid) # grid.draw() finished plot

# Data with group names specified
data_diabetic <- diabetic
data_diabetic$trt <- as.factor(data_diabetic$trt)
levels(data_diabetic$trt) <- c('None', 'Laser')

# Survival Model
fit <- survfit(Surv(time, status) ~ trt, data = data_diabetic)

# Kaplan Meier (KM) Plot
plot_km <- ggplot(
 data = tidy(fit),
 mapping = aes(x = time, y = estimate)
) +
  geom_step(aes(color = strata)) +
  geom_stepconfint(aes(ymin = conf.low, ymax = conf.high, fill = strata), alpha = 0.3) +
  coord_cartesian(c(0, 50)) + # Note scale set here!
  scale_x_continuous(expand = c(0.02,0)) +
  labs(x = 'Time', y = 'Freedom From Event') +
  scale_color_manual(
    values = c('#d83641', '#1A45A7'),
    name = 'Treatment',
    labels = c('Laser', 'None'),
    aesthetics = c('colour', 'fill')) +
  theme_basic()

# Risk Table
tbl_risk <- ggrisktable(fit, c(0, 10, 20, 30, 40, 50)) +
  coord_cartesian(c(0, 50)) +
  scale_x_continuous(expand = c(0.02,0)) +
  theme_risk()

# Combine KM plot and risk table
plot_cmbd <- append_table(
  plot = plot_km,
  table = tbl_risk
)

# Draw in RStudio viewer
grid.newpage()
grid.draw(plot_cmbd)

utile.visuals documentation built on Nov. 20, 2022, 5:07 p.m.