---
title: "Summarizing & Plotting"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Summarizing & Plotting}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r options, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  out.width = "90%",
  fig.width = 6,
  fig.asp = 0.618,
  fig.align = "center",
  dpi = 300
)
```

Different measuring devices and analysis software lead to opaque results in measuring gas exchange parameters. To make exercise science more transparent and reproducible, the `spiro` package offers a standardized workflow for data from metabolic carts.

This vignette provides you information on how to summarize and plot data [previously imported and processed](https://docs.ropensci.org/spiro/articles/import_processing.html) by `spiro()`.

#### Load the data

```{r setup}
library(spiro)

# import and process example data
file <- spiro_example("zan_gxt")
gxt_data <- spiro(file)
gxt_data
```

## Stepwise summary with `spiro_summary()`

In the analysis of gas exchange data, often mean parameters for each performed load step are of interest. To ensure the presence of a metabolic steady state, the end of each step is used for calculations.

```{r spiro_summary}
spiro_summary(gxt_data, interval = 120)
```

The length of the computational interval (in seconds) can be modified with the `interval` argument. If the interval exceeds the length of any step, it will be shortened for these steps displaying a note. You can turn such messages off with setting the argument `quiet = TRUE`.

## Maximal parameter values with `spiro_max()`

For some types of exercise tests it may be preferable to get maximal values of the measured parameters (e.g., the maximum oxygen uptake VO~2max~). `spiro_max()` calculates these after smoothing the data.

```{r spiro_max}
spiro_max(gxt_data, smooth = 30)
```
The `smooth` argument controls the interval and method for the data smoothing. Different smoothing methods are available: Moving averages over fixed time intervals (e.g. `smooth = 30` for 30 seconds), moving averages over a fixed number of breaths (e.g. `smooth = "30b"` for 30 breaths) or digital filters (e.g. `smooth = "0.04fz3"` for a third-order zero-phase low-pass Butterworth filter with a cut-off frequency of 0.04 Hz). Per default the smoothing will not apply to the heart rate values, but you can enable this behavior with `hr_smooth = TRUE`.

## Plotting the data

The `spiro` package lets you visualize data from cardiopulmonary exercise testing: With `spiro_plot()` you can display the traditional Wasserman 9-Panel Plot.

```{r spiro_plot, fig.width = 10, fig.height = 8, message = FALSE}
# load example data
data <- spiro(spiro_example("zan_ramp"), hr_file = spiro_example("hr_ramp.tcx"))

spiro_plot(data)
```

You can individually select and combine panels of the 9-Panel Plot by setting the `which` argument.

```{r spiro_plot-select, fig.width = 7, fig.height = 4}
# Plot only V-Slope (Panel 5) and VO2/VCO2 over time (Panel 3)
spiro_plot(data, which = c(5, 3))
```

Data over time (Panel 1,2,3,6,8,9) will be displayed smoothed, as determined via the `smooth` argument. The other panels (4,5,7) use the raw breath-by-breath data for visualization. 

You can control the appearance of the plots in `spiro_plot()`. Use the `style_args` argument to control the size and color of points and lines.

```{r spiro_plot-style-1, fig.width = 10, fig.height = 8, message = FALSE}
# Change size of points, width of lines and color of VO2 points/lines
spiro_plot(
  data,
  style_args = list(
    size = 1,
    linewidth = 2,
    color_VO2 = "black"
  )
)
```

Use the `base_size` argument to change the plot base size. You can pass other style arguments to `ggplot::theme()` via the `style_args` argument for further customization.

```{r spiro_plot-style-2, fig.width = 10, fig.height = 8, message = FALSE}
# Change base size and axis label font
spiro_plot(
  data,
  base_size = 9,
  style_args = list(
    axis.title = ggplot2::element_text(face = "italic", colour = "blue")
  )
)
```