# Visualization of in-text table summaries

#### Laure Cougnaud

#### May 04, 2026

This vignette focuses on the visualization functionalities available within the `inTextSummaryTable` package.

If you need to see figures bigger, just click on a graphic, and it will pop up more readable.

Summary statistics can be visualized by:

1. extracting the summary statistics table with the `computeSummaryStatisticsTable` function (used for `getSummaryStatistics` function)
2. visualizing the summary statistics via the `subjectProfileSummaryPlot` function

By default the `subjectProfileSummaryPlot` plots the mean values with error bars based on standard errors.

Moreover, the `subjectProfileSummaryPlot` allows the possibility to add a table of counts of the number of subject for a specific combination of variables.

This vignette will guide the user to

- default visualizations for A4 and presentation documents
- customize palettes of colors, shape, linetypes
- visualization with and without table of counts and by facets
- general customizable input

However, in order to get a full overview of the functionalities the documentation is available in the console with `? subjectProfileSummaryPlot`.

We will first create example data sets to show how the exporting functionalities work. The data sets used here are available in the `clinUtils` package.

# 1 Load packages and data

    library(inTextSummaryTable)
    library(clinUtils)

    # load example data
    data(dataADaMCDISCP01)

    dataAll <- dataADaMCDISCP01
    labelVars <- attr(dataAll, "labelVars")

# 2 Compute summary statistics

Below we compute summary statistics for the laboratory data set.

    dataLB <- subset(dataAll$ADLBC, grepl("Baseline|Week", AVISIT))
    dataLB$AVISIT <- with(dataLB, reorder(trimws(AVISIT), AVISITN))
    dataLB$TRTA <- with(dataLB, reorder(TRTA, TRTAN))

    summaryTableDf <- computeSummaryStatisticsTable(
        data = dataLB,
        var = "AVAL",
        rowVar = c("PARCAT1", "PARAM"),
        colVar = c("TRTA", "AVISIT")
    )

# 3 Visualization for A4 document

The code below shows the default visualization, which plots the mean with standard errors suitable for an A4 document, e.g. Word/pdf.

Note that the table below the plot is based on the counts for treatment and visit variables, as specificed in the `colVar` argument of the code chuck above for `computeSummaryStatisticsTable`.

    # create the plot
    dataPlot <- subset(
        summaryTableDf,
        !isTotal &
         PARAM == "Alanine Aminotransferase (U/L)"
    )

    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

# 4 Visualization for presentation

The code below shows the default visualization suitable for a presentation, either in Powerpoint or ioslides.

    # 'Tahoma' font should be registered upfront to create plots with: 'presentation' style
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN",
        style = "presentation"
    )

Please note that the default font for presentation is Tahoma.

If you don’t have this default font available, the R package extrafont might be useful to register fonts with your R graphics device.

# 5 Palettes

The `inTextSummaryTable` uses default palettes available in the `clinUtils` package.

However, palettes are fully customizable. Currently, there are two alternative approaches to change the defaults:

- set the custom palettes as arguments in the `subjectProfileSummaryPlot` via the dedicated parameters `colorPalette`, `shapePalette`, `linetypePalette`
- set the global options into the R session.

Passing input arguments to the function might be convenient when creating one plot.

Instead, passing the global options is very handy when creating multiple graphics, so that the palettes have to be set only once at the beginning of the R script, without the need to copy-paste input arguments in the different visualizations.

If you want to know more about aesthetics options of the `inTextSummaryTable`, see the vignette: Customization of aesthetics of in-text tables

If you want to know more about default options from the `clinUtils`, you may check out the vignette of the package:

    vignette("clinUtils-vignette", "clinUtils")

Sections below show below both alternative approaches for setting the palettes.

## 5.1 Custom palettes via arguments in the function

In this section we guide on how to set custom palettes via the `subjectProfileSummaryPlot` function.

### 5.1.1 Color palette

This section focuses on the possibility to set the `colorPalette` argument.

    # custom color palette by setting a named vector of colors
    customColorPalette <- c(
        `Xanomeline Low Dose` = "green",
        `Xanomeline High Dose` = "red",
        `Placebo` = "blue"
    )
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        colorPalette = customColorPalette,
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

### 5.1.2 Shape and linetype palettes

This section focuses on the possibility to set the `shapePalette` and `linetypePalette` arguments.

    # custom shape palette
    customShapePalette <- c(15, 17, 19)
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        shapePalette = customShapePalette,
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

    # custom linetype palette
    customLinetypePalette <- c("twodash", "dotted", "longdash")
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        linetypePalette = customLinetypePalette,
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

## 5.2 Custom palettes via setting global options

The `inTextSummaryTable` package allows the user to define global options in the R session.

As mentioned above, setting the global options is convenient because the palettes have to be set only once in the R script or Rmd document.

Please note that the global options have to be set after loading the package. This because when loading the package, the default global options for palettes will overwrite the custom palettes.

Here in practice:

    # this is OK
    library(inTextSummaryTable)
    options(inTextSummaryTable.colors.plot = customColorPalette)

    # this does NOT set your custom palette
    options(inTextSummaryTable.colors.plot = customColorPalette)
    library(inTextSummaryTable)

### 5.2.1 Coloring palettes

Color palettes can be set up with the `inTextSummaryTable.colors.plot` option.

    # custom color palette by setting a simple vector of colors
    customColorPalette <- c("blue", "green", "orange")
    options(inTextSummaryTable.colors.plot = customColorPalette)

    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

    # custom color palette by setting a named vector of colors
    customColorPalette <- c(
        `Xanomeline Low Dose` = "green",
        `Xanomeline High Dose` = "red",
        `Placebo` = "purple"
    )
    options(inTextSummaryTable.colors.plot = customColorPalette)

    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

### 5.2.2 Shape and linetype palettes

What shown for the color palette is consistent for shape and linetypes palettes. In this case, the global options are called `inTextSummaryTable.shapes.plot` and `inTextSummaryTable.linetypes.plot`.

    # custom shape palette
    customShapePalette <- c(17, 19, 22)
    options(inTextSummaryTable.shapes.plot = customShapePalette)

    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

    # custom linetype palette
    customLinetypePalette <- c("dotted", "longdash", "solid")
    options(inTextSummaryTable.linetypes.plot = customLinetypePalette)

    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

## 5.3 Set back default palettes

There is always to possibility to switch back to the default palettes of the package:

    options(inTextSummaryTable.colors.plot = clinColors)
    options(inTextSummaryTable.shapes.plot = clinShapes)
    options(inTextSummaryTable.linetypes.plot = clinLinetypes)

# 6 Visualization without count table

The user can decide to remove the table of counts by setting the parameter `tableText` to `NULL`, as the code below shows.

    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = NULL
    )

# 7 Visualization by facets

It is possible to directly plot multiple parameters with the `facetVar` argument.

Please note that setting the `facetVar` is not compatible with adding a table of counts underneath the plot.

    # create the plot
    dataPlotFacets <- subset(
        summaryTableDf,
        !isTotal &
            PARAM %in% c(
                "Alanine Aminotransferase (U/L)",
                "Albumin (g/L)",
                "Bilirubin (umol/L)",
                "Calcium (mmol/L)"
            )
    )

    subjectProfileSummaryPlot(
        data = dataPlotFacets,
        xVar = "AVISIT",
        colorVar = "TRTA",
        labelVars = labelVars,
        facetVar = c("PARCAT1", "PARAM"),
        useLinetype = TRUE
    )

# 8 Customize your visualization

The `subjectProfileSummaryPlot` has many options! A non-exaustive demonstration is presented below.

    # plot the median instead of mean
    # no error bars
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        meanVar = "statMedian",
        seVar = NULL,
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

    # plot the mean with standard deviation
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        seVar = "statSD",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

    # change labels
    subjectProfileSummaryPlot(
        data = dataPlot,
        xVar = "AVISIT",
        xLab = "Time points",
        yLab = "Mean and Standard Errors",
        title = "Title of the plot",
        colorVar = "TRTA",
        labelVars = labelVars,
        useLinetype = TRUE,
        tableText = "statN"
    )

# 9 Appendix

## 9.1 Session information

R version 4.6.0 (2026-04-24) Platform: x86_64-pc-linux-gnu Running under: Ubuntu 24.04.4 LTS

Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0

locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=C LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

time zone: Etc/UTC tzcode source: system (glibc)

attached base packages: [1] tools stats graphics grDevices utils datasets methods base

other attached packages: [1] plyr_1.8.9 clinUtils_0.2.2 inTextSummaryTable_3.4.0 knitr_1.51

loaded via a namespace (and not attached): [1] gtable_0.3.6 xfun_0.57 bslib_0.10.0 ggplot2_4.0.3 htmlwidgets_1.6.4 ggrepel_0.9.8
[7] vctrs_0.7.3 crosstalk_1.2.2 generics_0.1.4 tibble_3.3.1 pkgconfig_2.0.3 data.table_1.18.2.1
[13] RColorBrewer_1.1-3 S7_0.2.2 uuid_1.2-2 lifecycle_1.0.5 flextable_0.9.11 compiler_4.6.0
[19] farver_2.1.2 stringr_1.6.0 textshaping_1.0.5 fontquiver_0.2.1 fontLiberation_0.1.0 htmltools_0.5.9
[25] sass_0.4.10 yaml_2.3.12 Rttf2pt1_1.3.14 extrafontdb_1.1 pillar_1.11.1 jquerylib_0.1.4
[31] tidyr_1.3.2 openssl_2.4.0 DT_0.34.0 cachem_1.1.0 fontBitstreamVera_0.1.1 tidyselect_1.2.1
[37] zip_2.3.3 digest_0.6.39 stringi_1.8.7 dplyr_1.2.1 reshape2_1.4.5 purrr_1.2.2
[43] labeling_0.4.3 forcats_1.0.1 extrafont_0.20 cowplot_1.2.0 fastmap_1.2.0 grid_4.6.0
[49] cli_3.6.6 magrittr_2.0.5 withr_3.0.2 gdtools_0.5.0 scales_1.4.0 rmarkdown_2.31
[55] officer_0.7.4 otel_0.2.0 askpass_1.2.1 ragg_1.5.2 hms_1.1.4 evaluate_1.0.5
[61] haven_2.5.5 viridisLite_0.4.3 rlang_1.2.0 Rcpp_1.1.1-1.1 glue_1.8.1 xml2_1.5.2
[67] jsonlite_2.0.0 R6_2.6.1 systemfonts_1.3.2