Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(consort)
data(dispos.data)
## ----data-head, echo=FALSE----------------------------------------------------
head(dispos.data)
## ----example, eval=FALSE------------------------------------------------------
# consort_plot(data,
# orders,
# side_box,
# allocation = NULL,
# labels = NULL,
# cex = 0.8,
# text_width = NULL,
# widths = c(0.1, 0.9))
## ----patchwork, eval=FALSE----------------------------------------------------
# library(patchwork)
#
# wrap_elements(build_grid(g)) + plot_annotation(
# title = 'Consort diagram',
# subtitle = 'Flow chart of the XX study',
# caption = 'Disclaimer: None of these plots are insightful'
# )
## ----dump-dotfile, eval = FALSE-----------------------------------------------
# cat(build_grviz(g), file = "consort.gv")
## ----single-arms, message=FALSE, fig.width = 6, fig.height = 6---------------
out <- consort_plot(data = dispos.data,
orders = c(trialno = "Population",
exclusion = "Excluded",
trialno = "Allocated",
subjid_notdosed = "Not dosed",
followup = "Followup",
lost_followup = "Not evaluable for the final analysis",
mitt = "Final Analysis"),
side_box = c("exclusion", "subjid_notdosed", "lost_followup"),
cex = 0.9)
plot(out)
## ----multiple-phase, fig.width = 9, fig.height = 6---------------------------
g <- consort_plot(data = dispos.data,
orders = c(trialno = "Population",
exclusion1 = "Excluded",
induction = "Induction",
exclusion2 = "Excluded",
arm3 = "Randomized patient",
subjid_notdosed = "Not dosed",
mitt = "Final miTT Analysis"),
side_box = c("exclusion1", "exclusion2", "subjid_notdosed"),
allocation = "arm3",
labels = c("1" = "Screening", "2" = "Month 4",
"3" = "Randomization",
"5" = "End of study"),
cex = 0.7)
plot(g)
## ----multiple-split, fig.width = 12, fig.height = 8, out.width = "95%"-------
df <- dispos.data[!dispos.data$arm3 %in% "Trt C",]
g <- consort_plot(data = df,
orders = c(trialno = "Population",
exclusion1 = "Excluded",
induction = "Induction",
exclusion2 = "Excluded",
arm = "Randomized patient",
arm3 = "",
subjid_notdosed = "Not dosed",
mitt = "Final miTT Analysis"),
side_box = c("exclusion1", "exclusion2", "subjid_notdosed"),
allocation = c("arm", "arm3"),
labels = c("1" = "Screening", "2" = "Month 4",
"3" = "Randomization",
"6" = "End of study"),
cex = 0.7)
plot(g)
## ----multiple-split-stack, fig.width = 13, fig.height = 10, out.width = "95%"----
# We will exclude one arm to avoid too many arms.
df <- dispos.data[!dispos.data$arm3 %in% "Trt C",]
p <- consort_plot(data = df,
orders = list(c(trialno = "Population"),
c(exclusion = "Excluded"),
c(arm = "Randomized patient"),
# The following two variables will be stacked together
c(arm3 = "", # Should not provide a value to show the actual arm
subjid_notdosed="Participants not treated"),
# The following two variables will be stacked together
c(followup = "Pariticpants planned for follow-up",
lost_followup = "Reason for tot followed"),
c(assessed = "Assessed for final outcome"),
c(no_value = "Reason for not assessed"),
c(mitt = "Included in the mITT analysis")),
side_box = c("exclusion", "no_value"),
allocation = c("arm", "arm3"), # Two level randomisation
kickoff_sidebox = FALSE,
labels = c("1" = "Screening", "2" = "Randomization",
"5" = "Follow-up", "7" = "Final analysis"),
cex = 0.7)
plot(p)
## ----providetext1, fig.width = 7, fig.height = 4-----------------------------
library(grid)
# Might want to change some settings
options(txt_gp = gpar(cex = 0.8))
txt0 <- c("Study 1 (n=160)", "Study 2 (n=140)")
txt1 <- "Population (n=300)"
txt1_side <- "Excluded (n=15):\n\u2022 MRI not collected (n=3)\n\u2022 Tissues not collected (n=4)\n\u2022 Other (n=8)"
# supports pipeline operator
g <- add_box(txt = txt0) |>
add_box(txt = txt1) |>
add_side_box(txt = txt1_side) |>
add_box(txt = "Randomized (n=200)") |>
add_split(txt = c("Arm A (n=100)", "Arm B (n=100)")) |>
add_side_box(txt = c("Excluded (n=15):\n\u2022 MRI not collected (n=3)\n\u2022 Tissues not collected (n=4)\n\u2022 Other (n=8)",
"Excluded (n=7):\n\u2022 MRI not collected (n=3)\n\u2022 Tissues not collected (n=4)")) |>
add_box(txt = c("Final analysis (n=85)", "Final analysis (n=93)")) |>
add_label_box(txt = c("1" = "Screening",
"3" = "Randomized",
"4" = "Final analysis"))
plot(g)
## ----providetext2-------------------------------------------------------------
g <- add_box(txt = c("Study 1 (n=8)", "Study 2 (n=12)", "Study 3 (n=12)"))
g <- add_box(g, txt = "Included All (n=20)")
g <- add_side_box(g, txt = "Excluded (n=7):\n\u2022 MRI not collected (n=3)")
g <- add_box(g, txt = "Randomised")
g <- add_split(g, txt = c("Arm A (n=143)", "Arm B (n=142)"))
g <- add_box(g, txt = c("", "From Arm B"))
g <- add_box(g, txt = "Combine all")
# Length needs to be the same as previous one, use a list here.
g <- add_split(g, txt = list(c("Process 1 (n=140)", "Process 2 (n=140)",
"Process 3 (n=142)")))
plot(g, grViz = TRUE)
## ----manual-multisplit, fig.width = 13, fig.height = 6, out.width = "80%"----
g <- add_box(txt = "Patient consented (n=200)")
g <- add_side_box(g, txt = "Excluded (n=10):\n\u2022 MRI not collected (n=3)\n\u2022 Other (n=7)")
g <- add_box(g, txt = "Randomised (n=190)")
g <- add_split(g, txt = c("Randomised study (n=144)", "Preference study (n=146)"))
# Provide a list here
g <- add_split(g, txt = list(c("Allocated to surgery (n=70)",
"Allocated to medicine (n=74)"),
c("Allocated to surgery (n=47)",
"Allocated to medicine (n=48)",
"Placebo (n=51)")))
g <- add_side_box(g, txt = c("Excluded (n=3):\n\u2022 Withdrawn before surgery (n=2)\n\u2022 Declined (n=1)",
"",
"Excluded (n=1):\n\u2022 Withdrawn before surgery (n=1)",
"Excluded (n=3):\n\u2022 Withdrawn before surgery (n=1)\n\u2022 Declined (n=1)",
"Excluded (n=10):6\n\u2022 Declined (n=10)"),
side = rep("right", 5))
g <- add_box(g, txt = c("Analysed (n=67)", "Analysed (n=74)",
"Analysed (n=46)", "Analysed (n=45)", "Analysed (n=41)"))
plot(g)
## ----disposition-data, fig.width = 7, fig.height = 6.5-----------------------
options(txt_gp = gpar(cex = 0.8))
dispos.data$arm <- factor(dispos.data$arm)
txt <- gen_text(dispos.data$trialno, label = "Patient consented")
g <- add_box(txt = txt)
txt <- gen_text(dispos.data$exclusion, label = "Excluded", bullet = TRUE)
g <- add_side_box(g, txt = txt)
g <- add_box(g, txt = gen_text(dispos.data$arm, label = "Patients randomised"))
txt <- gen_text(dispos.data$arm)
g <- add_split(g, txt = txt)
# Exclude subjects
dispos.data <- dispos.data[is.na(dispos.data$exclusion), ]
txt <- gen_text(split(dispos.data[,c("subjid_notdosed")], dispos.data$arm),
label = "Not dosed", bullet = TRUE)
g <- add_box(g, txt = txt, just = "left")
txt <- gen_text(split(dispos.data$mitt, dispos.data$arm),
label = "Primary mITT analysis")
g <- add_box(g, txt = txt)
g <- add_label_box(g, txt = c("1" = "Baseline",
"5" = "Final analysis"))
plot(g)
## ----save-plot----------------------------------------------------------------
plot(g, grViz = TRUE)
## ----eval=FALSE---------------------------------------------------------------
# # save plots
# png("consort_diagram.png", width = 29,
# height = 21, res = 300, units = "cm", type = "cairo")
# plot(g)
# dev.off()
#
## ----eval=FALSE---------------------------------------------------------------
# ggplot2::ggsave("consort_diagram.pdf", plot = build_grid(g))
## ----eval=FALSE---------------------------------------------------------------
# plot(g, grViz = TRUE) |>
# DiagrammeRsvg::export_svg() |>
# charToRaw() |>
# rsvg::rsvg_pdf("svg_graph.pdf")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.