Title: Create Visuals for Publication
Version: 0.3.3
Description: A set of functions to aid in the production of visuals in ggplot2.
License: LGPL-2 | LGPL-2.1 | LGPL-3 [expanded from: LGPL (≥ 2)]
URL: https://efinite.github.io/utile.visuals/
BugReports: https://github.com/efinite/utile.visuals/issues
Encoding: UTF-8
Depends: R (≥ 3.4.0)
Imports: dplyr, ggplot2 (≥ 0.3.4), gridExtra, purrr
Suggests: survival, broom, grid
RoxygenNote: 7.2.3
NeedsCompilation: no
Packaged: 2023-01-24 00:42:07 UTC; Eric
Author: Eric Finnesgard [aut, cre]
Maintainer: Eric Finnesgard <efinite@outlook.com>
Repository: CRAN
Date/Publication: 2023-01-24 01:00:02 UTC

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)

Step function confidence intervals for ggplot2

Description

Produces a step function confidence interval for survival curves.

Usage

geom_stepconfint(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  na.rm = FALSE,
  ...
)

Arguments

mapping

Aesthetic mappings with aes() function. Like geom_ribbon(), you must provide columns for x, ymin (lower limit), ymax (upper limit).

data

The data to be displayed in this layer. Can inherit from ggplot parent.

stat

The statistical transformation to use on the data for this layer, as a string. Defaults to 'identity'.

position

Position adjustment, either as a string, or the result of a call to a position adjustment function.

na.rm

If FALSE, the default, missing values are removed with a warning. If TRUE, missing values are silently removed.

...

Optional. Any other ggplot geom_ribbon() arguments.

Note

Adapted from the survminer package <https://github.com/kassambara/survminer>.

Examples

library(survival)
library(broom)
library(ggplot2)

fit <- survfit(Surv(time, status) ~ trt, data = diabetic)
fit <- survfit0(fit) # connect origin

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)) +
  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('None', 'Laser'),
    aesthetics = c('colour', 'fill')) +
  theme_basic()

Create a ggplot2 table showing the number at risk

Description

A simple wrapper function which calculates the numbers at risk for a survival model and a given set of time points then creates a ggplot2 table with them.

Usage

ggrisktable(
  fit = NULL,
  times = NULL,
  text.color = "black",
  strata.order = NULL
)

Arguments

fit

Required. survival::survfit() object.

times

Required. Numeric. One or more time points to calculate the number at risk for.

text.color

Optional. Character. Color of text within table. Defaults to 'black'.

strata.order

Optional. Character. Ordered names of strata factor levels.

Value

An unformatted ggplot2 table showing the number at risk.

Examples

library(survival)

fit <- survfit(Surv(time, status) ~ trt, data = diabetic)

ggrisktable(
   fit = fit,
   times = c(0, 10, 20, 30, 40, 50),
   strata.order = c('0', '1')
) + theme_risk()

Add a panel border to a ggplot2 plot

Description

A simple ggplot2 theme which replaces the axis lines with a bordered panel.

Usage

panel_border(base_size = 12, base_color = NULL)

Arguments

base_size

A numeric. Base size. Used to calculate line size and spacing.

base_color

A character. Base color for lines.

Note

This should be placed after the primary theme for the plot.

Examples

library(ggplot2)

ggplot(datasets::mtcars, aes(x = wt, y = hp, color = as.factor(cyl))) +
  geom_point() +
  facet_wrap(~as.logical(am)) +
  theme_basic() +
  panel_border()

Minimalist theme for ggplot2

Description

A minimalist ggplot2 theme which removes most background elements and lines.

Usage

theme_basic(
  base_size = 12,
  base_family = NULL,
  base_color = "black",
  base_line_size = base_size/12,
  base_rect_size = base_size/12
)

Arguments

base_size

A numeric. Base font size.

base_family

A numeric. Base font family.

base_color

A character. Base color for lines and text.

base_line_size

A numeric. Base line element size.

base_rect_size

A numeric. Base rectangle element size.

Note

Recommend exporting as PNG or TIFF to preserve background transparency.

Examples

library(ggplot2)

ggplot(datasets::mtcars, aes(x = wt, y = hp, color = as.factor(cyl))) +
  geom_point() +
  theme_basic()

Minimalist risk table theme for ggplot2

Description

A minimalist ggplot2 theme which removes most background elements and lines.

Usage

theme_risk(
  base_size = 12,
  base_family = NULL,
  base_color = "black",
  base_line_size = base_size/12,
  base_rect_size = base_size/12
)

Arguments

base_size

A numeric. Base font size.

base_family

A numeric. Base font family.

base_color

A character. Base color for lines and text.

base_line_size

A numeric. Base line element size.

base_rect_size

A numeric. Base rectangle element size.

Note

Recommend exporting as PNG or TIFF to preserve background transparency.

See Also

ggrisktable

mirror server hosted at Truenetwork, Russian Federation.