---
title: "Customization of aesthetics of in-text tables"
author: "Michela Pasetto and Laure Cougnaud"
date: "`r format(Sys.Date(), '%B %d, %Y')`"
output: 
  rmarkdown::html_document:
    toc: true
    toc_float: true
    toc_depth: 5
    number_sections: true
vignette: >
  %\VignetteIndexEntry{06 - Customization of aesthetics of in-text tables}
  %\VignetteEngine{knitr::rmarkdown}
  \usepackage[utf8]{inputenc}
---

```{r options, echo = FALSE}

library(knitr)
opts_chunk$set(
    echo = TRUE, results = 'markup', warning = FALSE, 
    # stop document execution if error (not the default)
    error = FALSE, 
    message = FALSE, cache = FALSE,
    fig.width = 4, fig.height = 4,
    fig.path = "./figures_vignette/",
    fig.align = 'center')
options(width = 170)
# instead of warn = 0 by default
# include warnings when they occur in the document
options(warn = 1)

```

The `inTextSummaryTable` contains functionalities to set palettes up.

The **palettes for visualization are retrieved from the `clinUtils`**
package, whereas the **palettes for the tables are defined in the
`inTextSummaryTable`** itself.

Moreover, **palettes are set through global options**.

This has the main advantage that if you wish to change the default palettes, it
is possible to set your preferences only once at the beginning of the R script
or Rmd document.

When loading the package, the global options for palettes get
automatically defined into the R session. If you wish to change the default
color scheme, you can apply your preferences by changing the global
options. 

Below, we present what options are available and how to customize them.

# Available options

The `inTextSummaryTable` package has the following options:

* **`inTextSummaryTable.colors.table.presentation`**

* **`inTextSummaryTable.pageDim.presentation`**

* **`inTextSummaryTable.colors.plot`**

* **`inTextSummaryTable.shapes.plot`**

* **`inTextSummaryTable.linetypes.plot`**

The options with the wording _colors.table.presentation_ and
_pageDim.presentation_ define the color scheme for tables and
the dimensions of the page in a presentation, respectively.

Instead, the options with _colors.plot_, _shapes.plot_ and
_linetype.plot_ set up the palettes for the visualization functionalities.

Note that **the options have to be defined after loading the package**. This
because when loading the package, the default global options for palettes will
overwrite the custom palettes.

In this way, you can see how the options are visible after loading the package:

```{r aesthetics-showOptions}

library(inTextSummaryTable)

# options for color scheme in in presentations
options("inTextSummaryTable.colors.table.presentation")

# options for colors in plots: viridis palette
options("inTextSummaryTable.colors.plot")

# options for shapes in plots
options("inTextSummaryTable.shapes.plot")

# options for linetypes in plots
options("inTextSummaryTable.linetypes.plot")

```


# Options for reporting

In this section we discuss the options for reporting, namely the
`inTextSummaryTable.colors.table.presentation` and
`inTextSummaryTable.pageDim.presentation`.

## Colors

By default, the reporting format makes tables with a black text on a white
background.

On the contrary, the presentation format creates tables with a blue header and
white text, whereas the body is grey with black text.

Below a demonstration for a dummy data set.

```{r aesthetics-defaultsReporting}

# default report style
getSummaryStatisticsTable(
    data = data.frame(USUBJID = c(1, 2)),
    style = "report" 
)

# default presentation style
getSummaryStatisticsTable(
    data = data.frame(USUBJID = c(1, 2)),
    style = "presentation" 
)

```

If you wish to define a personal color scheme, a named vector can be created and
passed to the `options`, as shown below.

Colors can be provided in hexadecimals or in `rgb` specification. In the
example we use hexadecimals just for convenience.

Note that the `bodyBackground1` and `bodyBackground2` allow to have alternating
row colors.

```{r aesthetics-changeReportingOptions}

# create named vector
customColorTable <- c(
    # black text in the header
    'header' = "#000000",
    # green background in the header
    'headerBackground' = "#74D055FF",
    # black text in the body
    'body' = "#000000", 
    # yellow background for all rows
    'bodyBackground1' = "#FDE725FF",
    'bodyBackground2' = "#FDE725FF",
    # black footer
    'footer' = "#000000",
    # white footer background
    'footerBackground' = "#FFFFFF",
    # black line for footer
    'line' = "#000000"
)
# set options
options(inTextSummaryTable.colors.table.presentation = customColorTable)
# create the table
getSummaryStatisticsTable(
    data = data.frame(USUBJID = c(1, 2)),
    style = "presentation" 
)

```

## Dimension of the page

By default, the `inTextSummaryTable` ships with a default PowerPoint in the
standard 4:3 size (7.5 x 10 inches).

However, it is often common to create a PowerPoint template with **Widescreen
size** of 16:9 which consistts of 7.50 x 13.32 inches.

Therefore, it possible to accomodate such widescreen size by providing

```{r aesthetics-changeDimPageOptions}

# default page dimension of a powerpoint created with Rmd
getOption("inTextSummaryTable.pageDim.presentation")

# set custom dimension of page for presentation
# in this example, the dimension is the widescreen size
pageDimCustom <- c(7.5, 13.32)
options(inTextSummaryTable.pageDim.presentation = pageDimCustom)
getOption("inTextSummaryTable.pageDim.presentation")

```

# Options for visualization

The defaults palettes for visualization are retrieved from the `clinUtils`
package.

If you wish to know more about those palettes, we refer to the vignette of
`clinUtils` available with 

```{r getVignetteClinUtils, eval = FALSE}

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

```

Below a demonstration with a dummy data set.

```{r aesthetics-defaultsVisualization}

# default colors, shapes and linetypes
summaryTable <- data.frame(
    visit = c(1, 2, 1, 2), 
    TRT = c("A", "A", "B", "B"),
    statMean = rnorm(4)
)    
subjectProfileSummaryPlot(
    data = summaryTable,
    xVar = "visit", 
    colorVar = "TRT" 
)

```

For the visualization, the same spirit of the tables applies. The user can
specify a vector of colors, shapes or linetypes. The vector do not necessarly
have to be named.

```{r aesthetics-changeVisualizationOptions}

# specify colors
options(inTextSummaryTable.colors.plot = c("red", "green"))
subjectProfileSummaryPlot(
    data = summaryTable,
    xVar = "visit", 
    colorVar = "TRT" 
)

# specify shape
options(inTextSummaryTable.shapes.plot = c("circle", "square"))
subjectProfileSummaryPlot(
    data = summaryTable,
    xVar = "visit", 
    colorVar = "TRT" 
)

# specify linetypes
options(inTextSummaryTable.linetypes.plot = c("dotdash", "longdash"))
subjectProfileSummaryPlot(
    data = summaryTable,
    xVar = "visit", 
    colorVar = "TRT" 
)

```

# Set back default palettes

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

```{r aesthetics-backDefaultPalettes}

options(inTextSummaryTable.colors.table.presentation = tableColorsPresentation)
options(inTextSummaryTable.colors.plot = clinUtils::clinColors)
options(inTextSummaryTable.shapes.plot = clinUtils::clinShapes)
options(inTextSummaryTable.linetypes.plot = clinUtils::clinLinetypes)

```

# Set up specific palettes

# Page dimensions in report/presentation 

The function **`getDimPage`** extracts dimensions available for a content in a
report or presentation, e.g. to specify the maximal width of a figure in A4
report or for a presentation.

```{r aesthetics-getDimPage}

# a4 format with one 1 inch margin
getDimPage(type = "width", style = "report")
getDimPage(type = "height", style = "report")

# Presentation format (according to template) with one 1 inch margin
getDimPage(type = "width", style = "presentation")
getDimPage(type = "height", style = "presentation")

```

# Appendix

## Session information

```{r includeSessionInfo, echo = FALSE, results = "asis"}
print(sessionInfo())
```