Skip to contents

The `react_sparkline()` function utilizes the dataui package <https://github.com/timelyportfolio/dataui> to create an interactive sparkline line chart. The data provided must be in a list format. The vertical height of the sparkline can be adjusted with `height`. By default, the height is matched to the height of a cell in a reactable table. However, when min/max/all labels are applied, the height is auto-increased to better show the labels. Further adjustment of the height may be needed to better see the patterns in the data. The four-sided margin around the sparkline can be controlled with `margin()`. When labels are added to the sparklines, the margin will auto-adjust (in most instances) to be able to display those labels. If the labels contain large values or values with many digits, the left and right margins may need to be increased slightly for the full numbers to be visible. By default, the sparkline line (the line that connects the data points) is shown but can be hidden by setting `show_line` to FALSE. The line color, line width, and line curve can be controlled with `line_color`, `line_width`, and `line_curve` respectively. The filled area beneath the line can be shown by setting `show_area` to TRUE. When the area is shown, the area color can be controlled with `area_color` or `area_color_ref` and opacity can be controlled with `area_opacity`. `statline` can be used to show a horizontal dotted line that represents either the mean, median, min, or max (your choice). The appearance of the statline and statline labels can be controlled with `statline_color` and `statline_label_size`. A bandline can be added by using `bandline`. The options are innerquartiles which highlights the innerquartiles of the data or range which highlights the full range of the data. By default, `react_sparkline()` is interactive and data points will be shown when hovering over the sparklines. This can be turned off by setting `tooltip` to FALSE. There are two tooltip types available within `tooltip_type`. The size and color of the tooltip labels can be adjusted with `tooltip_size` and `tooltip_color`. Also by default, there are no labels on the line itself. However, one could add labels to the first, last, min, max, or all values within `labels`. The labels that are shown on the sparkline and in the tooltip are automatically rounded to the nearest whole integer. But decimals can be shown by providing the number of decimal places in `decimals`. The minimum value of a data series is the minimum value shown for a sparkline, but this can be adjusted with `min_value` and the max can be adjusted with `max_value`. `react_sparkline()` should be placed within the cell argument in reactable::colDef.

Usage

react_sparkline(
  data,
  height = 22,
  show_line = TRUE,
  line_color = "slategray",
  line_color_ref = NULL,
  line_width = 1,
  line_curve = "cardinal",
  highlight_points = NULL,
  point_size = 1.1,
  labels = "none",
  label_size = "0.8em",
  decimals = 0,
  min_value = NULL,
  max_value = NULL,
  show_area = FALSE,
  area_color = NULL,
  area_color_ref = NULL,
  area_opacity = 0.1,
  statline = NULL,
  statline_color = "red",
  statline_label_size = "0.8em",
  bandline = NULL,
  bandline_color = "red",
  bandline_opacity = 0.2,
  tooltip = TRUE,
  tooltip_type = 1,
  tooltip_color = NULL,
  tooltip_size = "1.1em",
  margin = NULL
)

Arguments

data

Dataset containing a column with numeric values in a list format.

height

Height of the sparkline. Default is 22.

show_line

Logical: show or hide the line. Default is TRUE.

line_color

The color of the line. Default is slategray.

line_color_ref

Optionally assign line colors from another column by providing the name of the column containing the colors in quotes. Only one color can be provided per row. Default is NULL.

line_width

Width of the line. Default is 1.

line_curve

The curvature of the line. Options are 'cardinal', 'linear', 'basis', or 'monotoneX'. Default is 'cardinal'.

highlight_points

Use `highlight_points()` to assign colors to particular points. Colors can be assigned to all, min, max, first, or last points. By default, transparent colors are assigned to each point.

point_size

Size of the points. Must first assigned colors to point(s) using `highlight_points`. Default is 1.1.

labels

Show labels for points of interest. Options are 'min', 'max', 'first', 'last', 'all', or 'none'. Default is 'none'.

label_size

Size of the labels. Default is '0.8em'.

decimals

The number of decimals displayed in the labels and tooltip. Default is 0.

min_value

The minimum value of the sparkline range. Default is NULL (automatically the minimum value of each sparkline series). Takes either:

1. a numeric vector of length 1 2. a numeric vector of length equal to the number of rows 3. a column name (as string) which holds the min_values to use 4. a function which is applied to the minimum value of each row

max_value

The maximum value of the sparkline range. Default is NULL (automatically the maximum value of each sparkline series). Takes either:

1. a numeric vector of length 1 2. a numeric vector of length equal to the number of rows 3. a column name (as string) which holds the max_values to use 4. a function which is applied to the maximum value of each row

show_area

Logical: show or hide area beneath line. Default is FALSE.

area_color

The color of the area. `show_area` must be set to TRUE for color to be shown. Default is NULL (inherited from line_color).

area_color_ref

Optionally assign area colors from another column by providing the name of the column containing the colors in quotes. Only one area color can be provided per row. Default is NULL. Default is FALSE.

area_opacity

A value between 0 and 1 that adjusts the opacity. A value of 0 is fully transparent, a value of 1 is fully opaque. Default is 0.1.

statline

Inserts a horizontal dotted line representing a statistic, and places the value of that statistic to the right of the line. Options are 'mean', 'median', 'min', or 'max'. Default is NULL.

statline_color

The color of the horizontal dotted statline. Default is red.

statline_label_size

The size of the label to the right of the statline. Default is '0.8em'.

bandline

Inserts a horizontal bandline to render ranges of interest. Options are 'innerquartiles' or 'range' (min to max). Default is NULL.

bandline_color

The color of the bandline. Default is red.

bandline_opacity

A value between 0 and 1 that adjusts the opacity. A value of 0 is fully transparent, a value of 1 is fully opaque. Default is 0.2.

tooltip

Logical: turn the tooltip on or off. Default is TRUE.

tooltip_type

The tooltip type. Options are 1 or 2. Default is 1.

tooltip_color

The color of the tooltip labels. Default is NULL.

tooltip_size

The size of the tooltip labels. Default is '1.1em'.

margin

The four-sided margin around the sparkline. Use margin() to assign the top, right, bottom, and left margins.

Value

a function that creates a sparkline chart from a column containing a list of values.

Examples

## Default sparkline line chart
library(dplyr)
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(petal_width = colDef(cell = react_sparkline(.))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Highlight min and max data points
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(
 petal_width = colDef(cell = react_sparkline(.,
 decimals = 1,
 highlight_points = highlight_points(min="red",max="blue")))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Add labels to data points and change curvature of line
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(petal_width = colDef(cell = react_sparkline(.,
 line_curve = "linear",
 decimals = 1,
 highlight_points = highlight_points(first="orange",last="blue"),
 labels = c("first","last")))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Conditionally assign line colors to groups
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 mutate(flower_cols = case_when(
   Species == "setosa" ~ "purple",
   Species == "versicolor" ~ "darkgreen",
   Species == "virginica" ~ "orange",
   TRUE ~ "grey"
 )) %>%
 reactable(.,
 columns = list(flower_cols = colDef(show=FALSE),
 petal_width = colDef(cell = react_sparkline(.,
 height = 80,
 line_color_ref = "flower_cols"))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Show area beneath the line
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(petal_width = colDef(cell = react_sparkline(.,
 height = 80,
 line_color = "dodgerblue",
 show_area = TRUE))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Conditionally assign colors to the area below the line
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 mutate(flower_cols = case_when(
   Species == "setosa" ~ "purple",
   Species == "versicolor" ~ "darkgreen",
   Species == "virginica" ~ "orange",
   TRUE ~ "grey"
 )) %>%
 reactable(.,
 columns = list(flower_cols = colDef(show=FALSE),
 petal_width = colDef(cell = react_sparkline(.,
 height = 80,
 show_area = TRUE,
 line_color_ref = "flower_cols",
 area_color_ref = "flower_cols"))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Add bandline to show innerquartile range
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(petal_width = colDef(cell = react_sparkline(.,
 height = 80,
 decimals = 1,
 highlight_points = highlight_points(max="red"),
 labels = c("max"),
 bandline = "innerquartiles",
 bandline_color = "darkgreen"))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Add statline to show the mean for each sparkline
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(petal_width = colDef(cell = react_sparkline(.,
 height = 80,
 decimals = 1,
 statline = "mean",
 statline_color = "red"))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator

## Combine multiple elements together
iris %>%
 group_by(Species) %>%
 summarize(petal_width = list(Petal.Width)) %>%
 reactable(.,
 columns = list(petal_width = colDef(cell = react_sparkline(.,
 height = 80,
 decimals = 1,
 statline = "mean",
 statline_color = "red",
 bandline = "innerquartiles",
 bandline_color = "darkgreen"))))
#> Error in x$width %||% settings$fig.width * settings$dpi: non-numeric argument to binary operator