ggsurvplot: Drawing Survival Curves Using ggplot2

Description Usage Arguments Details Value Functions Author(s) Examples

Description

Drawing survival curves using ggplot2

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ggsurvplot(fit, data = NULL, fun = NULL, color = NULL, palette = NULL,
  linetype = 1, break.x.by = NULL, break.y.by = NULL,
  break.time.by = NULL, surv.scale = c("default", "percent"),
  conf.int = FALSE, conf.int.fill = "gray", conf.int.style = "ribbon",
  censor = TRUE, pval = FALSE, pval.size = 5, pval.coord = c(NULL,
  NULL), pval.method = FALSE, pval.method.size = pval.size,
  pval.method.coord = c(NULL, NULL), log.rank.weights = c("survdiff", "1",
  "n", "sqrtN", "S1", "S2", "FH_p=1_q=1"), title = NULL, xlab = "Time",
  ylab = "Survival probability", xlim = NULL, ylim = NULL,
  legend = c("top", "bottom", "left", "right", "none"),
  legend.title = "Strata", legend.labs = NULL, tables.height = 0.25,
  tables.y.text = TRUE, tables.col = "black", risk.table = FALSE,
  risk.table.pos = c("out", "in"), risk.table.title = NULL,
  risk.table.col = tables.col, risk.table.fontsize = 4.5, fontsize = 4.5,
  risk.table.y.text = tables.y.text, risk.table.y.text.col = TRUE,
  risk.table.height = tables.height, surv.plot.height = 0.75,
  ncensor.plot.height = tables.height, cumevents.height = tables.height,
  cumcensor.height = tables.height, ncensor.plot = FALSE,
  ncensor.plot.title = NULL, cumevents = FALSE,
  cumevents.col = tables.col, cumevents.title = NULL,
  cumevents.y.text = tables.y.text, cumevents.y.text.col = TRUE,
  cumcensor = FALSE, cumcensor.col = tables.col, cumcensor.title = NULL,
  cumcensor.y.text = tables.y.text, cumcensor.y.text.col = TRUE,
  surv.median.line = c("none", "hv", "h", "v"), ggtheme = theme_survminer(),
  tables.theme = ggtheme, ...)

## S3 method for class 'ggsurvplot'
print(x, surv.plot.height = NULL,
  risk.table.height = NULL, ncensor.plot.height = NULL, newpage = TRUE,
  ...)

Arguments

fit

an object of class survfit.

data

a dataset used to fit survival curves. If not supplied then data will be extracted from 'fit' object.

fun

an arbitrary function defining a transformation of the survival curve. Often used transformations can be specified with a character argument: "event" plots cumulative events (f(y) = 1-y), "cumhaz" plots the cumulative hazard function (f(y) = -log(y)), and "pct" for survival probability in percentage.

color

color to be used for the survival curves. This argument is ignored when the number of strata (groups > 1). In this case, use the argument palette.

palette

the color palette to be used. Allowed values include "hue" for the default hue color scale; "grey" for grey color palettes; brewer palettes e.g. "RdBu", "Blues", ...; or custom color palette e.g. c("blue", "red"). See details section for more information.

linetype

line types. Allowed values includes i) "strata" for changing linetypes by strata (i.e. groups); ii) a numeric vector (e.g., c(1, 2)) or a character vector c("solid", "dashed").

break.x.by

alias of break.time.by. Numeric value controlling x axis breaks. Default value is NULL.

break.y.by

same as break.x.by but for y axis.

break.time.by

numeric value controlling time axis breaks. Default value is NULL.

surv.scale

scale transformation of survival curves. Allowed values are "default" or "percent".

conf.int

logical value. If TRUE, plots confidence interval.

conf.int.fill

fill color to be used for confidence interval.

conf.int.style

confidence interval style. Allowed values include c("ribbon", "step").

censor

logical value. If TRUE, censors will be drawn.

pval

logical value. If TRUE, the p-value is added on the plot.

pval.size

numeric value specifying the p-value text size. Default is 5.

pval.coord

numeric vector, of length 2, specifying the x and y coordinates of the p-value. Default values are NULL.

pval.method

whether to add a text with the test name used for calculating the pvalue, that corresponds to survival curves' comparison - used only when pval=TRUE

pval.method.size

the same as pval.size but for displaying log.rank.weights name

pval.method.coord

the same as pval.coord but for displaying log.rank.weights name

log.rank.weights

The name for the type of weights to be used in computing the p-value for log-rank test. By default survdiff is used to calculate regular log-rank test (with weights == 1). A user can specify "1", "n", "sqrtN", "S1", "S2", "FH" to use weights specified in comp, so that weight correspond to the test as : 1 - log-rank, n - Gehan-Breslow (generalized Wilcoxon), sqrtN - Tarone-Ware, S1 - Peto-Peto's modified survival estimate, S2 - modified Peto-Peto (by Andersen), FH - Fleming-Harrington(p=1, q=1).

title, xlab, ylab

main title and axis labels

xlim, ylim

x and y axis limits e.g. xlim = c(0, 1000), ylim = c(0, 1).

legend

character specifying legend position. Allowed values are one of c("top", "bottom", "left", "right", "none"). Default is "top" side position. to remove the legend use legend = "none". Legend position can be also specified using a numeric vector c(x, y); see details section.

legend.title

legend title.

legend.labs

character vector specifying legend labels. Used to replace the names of the strata from the fit. Should be given in the same order as those strata.

tables.height

numeric value (in [0 - 1]) specifying the general height of all tables under the main survival plot.

tables.y.text

logical. Default is TRUE. If FALSE, the y axis tick labels of tables will be hidden.

tables.col

color to be used for all tables under the main plot. Default value is "black". If you want to color by strata (i.e. groups), use tables.col = "strata".

risk.table

Allowed values include:

  • TRUE or FALSE specifying whether to show or not the risk table. Default is FALSE.

  • "absolute" or "percentage": to show the absolute number and the percentage of subjects at risk by time, respectively. Use i) "abs_pct" to show both absolute number and percentage. ii) "nrisk_cumcensor" and "nrisk_cumevents" to show the number at risk and, the cumulative number of censoring and events, respectively.

risk.table.pos

character vector specifying the risk table position. Allowed options are one of c("out", "in") indicating 'outside' or 'inside' the main plot, respectively. Default value is "out".

risk.table.title

The title to be used for the risk table.

risk.table.col

same as tables.col but for risk table only.

risk.table.fontsize, fontsize

font size to be used for the risk table and the cumulative events table.

risk.table.y.text

logical. Default is TRUE. If FALSE, risk table y axis tick labels will be hidden.

risk.table.y.text.col

logical. Default value is FALSE. If TRUE, risk table tick labels will be colored by strata.

risk.table.height

the height of the risk table on the grid. Increase the value when you have many strata. Default is 0.25. Ignored when risk.table = FALSE.

surv.plot.height

the height of the survival plot on the grid. Default is 0.75. Ignored when risk.table = FALSE. 1-risk.table.height - ncensor.plot.height when risk.table = TRUE and ncensor.plot = TRUE

ncensor.plot.height

The height of the censor plot. Used when ncensor.plot = TRUE.

cumevents.height

the height of the cumulative events table on the grid. Default is 0.25. Ignored when cumevents = FALSE.

cumcensor.height

the height of the cumcensor table on the grid. Default is 0.25. Ignored when cumcensor = FALSE.

ncensor.plot

logical value. If TRUE, the number of censored subjects at time t is plotted. Default is FALSE. Ignored when cumcensor = TRUE.

ncensor.plot.title

The title to be used for the censor plot. Used when ncensor.plot = TRUE.

cumevents

logical value specifying whether to show or not the table of the cumulative number of events. Default is FALSE.

cumevents.col

same as tables.col but for the cumulative events table only.

cumevents.title

The title to be used for the cumulative events table.

cumevents.y.text

logical. Default is TRUE. If FALSE, the y axis tick labels of the cumulative events table will be hidden.

cumevents.y.text.col

logical. Default value is FALSE. If TRUE, the y tick labels of the cumulative events will be colored by strata.

cumcensor

logical value specifying whether to show or not the table of the cumulative number of censoring. Default is FALSE.

cumcensor.col

same as tables.col but for cumcensor table only.

cumcensor.title

The title to be used for the cumcensor table.

cumcensor.y.text

logical. Default is TRUE. If FALSE, the y axis tick labels of the cumcensor table will be hidden.

cumcensor.y.text.col

logical. Default value is FALSE. If TRUE, the y tick labels of the cumcensor will be colored by strata.

surv.median.line

character vector for drawing a horizontal/vertical line at median survival. Allowed values include one of c("none", "hv", "h", "v"). v: vertical, h:horizontal.

ggtheme

function, ggplot2 theme name. Default value is theme_survminer. Allowed values include ggplot2 official themes: see theme.

tables.theme

function, ggplot2 theme name. Default value is theme_survminer. Allowed values include ggplot2 official themes: see theme.

...

other arguments to be passed i) to ggplot2 geom_*() functions such as linetype, size, ii) or to the function ggpubr::ggpar() for customizing the plots. See details section.

x

an object of class ggsurvplot

newpage

open a new page. See grid.arrange

Details

  • legend position: The argument legend can be also a numeric vector c(x,y). In this case it is possible to position the legend inside the plotting area. x and y are the coordinates of the legend box. Their values should be between 0 and 1. c(0,0) corresponds to the "bottom left" and c(1,1) corresponds to the "top right" position. For instance use legend = c(0.8, 0.2).

  • Color palettes: The argument palette can be used to specify the color to be used for each group. By default, the first color in the palette is used to color the first level of the factor variable. This default behavior can be changed by assigning correctly a named vector. That is, the names of colors should match the strata names as generated by the ggsurvplot() function in the legend.

  • Customizing the plots: The plot can be easily customized using additional arguments to be passed to the function ggpar(). Read ?ggpubr::ggpar. These arguments include font.title, font.subtitle, font.caption, font.x, font.y, font.tickslab and font.legend: a vector of length 3 indicating respectively the size (e.g.: 14), the style (e.g.: "plain", "bold", "italic", "bold.italic") and the color (e.g.: "red") of main title, subtitle, caption, xlab and ylab, axis tick labels and legend, respectively. For example font.x = c(14, "bold", "red"). Use font.x = 14, to change only font size; or use font.x = "bold", to change only font face.

Value

return an object of class ggsurvplot which is list containing the following components:

  • plot: the survival plot (ggplot object)

  • table: the number of subjects at risk table per time (ggplot object).

  • cumevents: the cumulative number of events table (ggplot object).

  • ncensor.plot: the number of censoring (ggplot object).

  • data.survplot: the data used to plot the survival curves (data.frame).

  • data.survtable: the data used to plot the tables under the main survival curves (data.frame).

Functions

  • ggsurvplot: Draws survival curves using ggplot2.

Author(s)

Alboukadel Kassambara, alboukadel.kassambara@gmail.com

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Example 1: Survival curves with two groups
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

# Fit survival curves
#++++++++++++++++++++++++++++++++++++
require("survival")
fit<- survfit(Surv(time, status) ~ sex, data = lung)

# Basic survival curves
ggsurvplot(fit, data = lung)

# Customized survival curves
ggsurvplot(fit, data = lung,
 surv.median.line = "hv", # Add medians survival

 # Change legends: title & labels
 legend.title = "Sex",
 legend.labs = c("Male", "Female"),
 # Add p-value and confidence intervals
 pval = TRUE,

 conf.int = TRUE,
 # Add risk table
 risk.table = TRUE,
 tables.height = 0.2,
 tables.theme = theme_cleantable(),

 # Color palettes. Use custom color: c("#E7B800", "#2E9FDF"),
 # or brewer color (e.g.: "Dark2"), or ggsci color (e.g.: "jco")
 palette = c("#E7B800", "#2E9FDF"),
 ggtheme = theme_bw() # Change ggplot2 theme
)

# Change font size, style and color
#++++++++++++++++++++++++++++++++++++
## Not run: 
# Change font size, style and color at the same time
ggsurvplot(fit, data = lung,  main = "Survival curve",
   font.main = c(16, "bold", "darkblue"),
   font.x = c(14, "bold.italic", "red"),
   font.y = c(14, "bold.italic", "darkred"),
   font.tickslab = c(12, "plain", "darkgreen"))

## End(Not run)



#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Example 2: Facet ggsurvplot() output by
# a combination of factors
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

# Fit (complexe) survival curves
#++++++++++++++++++++++++++++++++++++
## Not run: 
require("survival")
fit3 <- survfit( Surv(time, status) ~ sex + rx + adhere,
                data = colon )

# Visualize
#++++++++++++++++++++++++++++++++++++
ggsurv <- ggsurvplot(fit3, data = colon,
  fun = "cumhaz", conf.int = TRUE,
  risk.table = TRUE, risk.table.col="strata",
  ggtheme = theme_bw())

# Faceting survival curves
curv_facet <- ggsurv$plot + facet_grid(rx ~ adhere)
curv_facet

# Faceting risk tables:
# Generate risk table for each facet plot item
ggsurv$table + facet_grid(rx ~ adhere, scales = "free")+
 theme(legend.position = "none")

 # Generate risk table for each facet columns
tbl_facet <- ggsurv$table + facet_grid(.~ adhere, scales = "free")
tbl_facet + theme(legend.position = "none")

# Arrange faceted survival curves and risk tables
g2 <- ggplotGrob(curv_facet)
g3 <- ggplotGrob(tbl_facet)
min_ncol <- min(ncol(g2), ncol(g3))
g <- gridExtra::rbind.gtable(g2[, 1:min_ncol], g3[, 1:min_ncol], size="last")
g$widths <- grid::unit.pmax(g2$widths, g3$widths)
grid::grid.newpage()
grid::grid.draw(g)


## End(Not run)


Search within the survminer package
Search all R packages, documentation and source code

Questions? Problems? Suggestions? or email at ian@mutexlabs.com.

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.