library(chartjs4r)
library(ggplot2) # cross comparisons

Introduction

A vignette to explore the functions of chartjs4r!

bar chart

# example data shipped with the package
cjs_example_data('bar')
#>   letters numbers group
#> 1       A       2    g1
#> 2       B       5    g1
#> 3       C       9    g1
#> 4       D       9    g1
#> 5       E       9    g1

A simple call. We often need to build further from here.

cjs_example_data('bar') %>%
  chartjs(type = 'bar', x = letters, y = numbers)
# Multiple groups in data
cjs_example_data('bar', grouped = TRUE) %>%
  chartjs(type = 'bar', x = letters, y = numbers, group = group)

Adding axis and themes.

cjs_example_data('bar') %>%
  chartjs(type = 'bar', x = letters, y = numbers) %>% 
  cjs_scale_cartesian(id = 'y', title.text = 'count',
                      ticks = cjs_ticks(callback = ticks_integer_callback(step = 1))) %>% 
  cjs_scale_category(id = 'x', labels = LETTERS[c(5,2,3,4,1)],
                     grid = cjs_grid(display = FALSE)) %>% 
  cjs_theme(title.text = 'A Chart.js plot', legend.position = 'none')

Adding datasets.

cjs_example_data('bar') %>%
  chartjs() %>% 
  cjs_add_bars(x = letters, y = numbers, label = 'from source data') %>% 
  cjs_add_bars(x = LETTERS[1:5], y = 5:1, label = 'from vectors') %>% 
  cjs_add_bars(x = x1, y = y1, label = 'from given data',
               data = data.frame(x1 = LETTERS[c(5,1,4,2,3)], y1 = 1:5)) %>% 
  cjs_scale_color(backgroundColors = c('#181E20', '#045C94','#FFBB1C'))

Stacking dataset sets - stacked bar plot

cjs_example_data('bar') %>%
  chartjs() %>% 
  cjs_add_bars(x = letters, y = numbers, label = 'from source data') %>% 
  cjs_add_bars(x = LETTERS[1:5], y = 5:1, label = 'from vectors') %>% 
  cjs_add_bars(x = x1, y = y1, label = 'from given data',
               data = data.frame(x1 = LETTERS[1:5], y1 = rpois(5,5))) %>% 
  cjs_scale_color(backgroundColors = c('#181E20', '#045C94','#FFBB1C')) %>% 
  cjs_stack_bars()

Horizontal bar plot

cjs_example_data('bar') %>%
  chartjs(type = 'bar') %>% 
  cjs_add_bars(x = letters, y = numbers, colors = palette()[1:5]) %>% 
  cjs_bar_orientation('horizontal')

Date axis - note uses formatting of https://date-fns.org/https://date-fns.org/v2.29.3/docs/format

cjs_example_data('scatter') %>% 
  chartjs() %>% 
  cjs_add_bars(x = x_time, y = y_numbers) %>% 
  cjs_scale_datetime(id = 'x', time.unit = 'day')
cjs_example_data('scatter') %>% 
  chartjs() %>% 
  cjs_add_bars(x = x_time, y = y_numbers) %>% 
  cjs_scale_datetime(id = 'x', time.unit = 'day', time.displayFormats = 'dd/MM/yyyy')
# expands data
cjs_example_data('scatter') %>% 
  ggplot() +
  geom_col(aes(x = x_time, y = y_numbers))

scatter chart

# example data shipped with the package
cjs_example_data('scatter')
#>     x_numbers     x_time y_numbers group
#> 1  0.70434656 2023-02-03 0.9241095    g1
#> 2  0.61095227 2023-01-30 0.3259473    g1
#> 3  0.81950563 2023-02-18 0.2961739    g1
#> 4  0.15195177 2023-02-07 0.6411449    g1
#> 5  0.19323078 2023-02-17 0.5528425    g1
#> 6  0.06816125 2023-02-14 0.1739521    g1
#> 7  0.59152163 2023-02-11 0.1555849    g1
#> 8  0.48264563 2023-02-21 0.2817575    g1
#> 9  0.04611713 2023-02-23 0.6122001    g1
#> 10 0.40799044 2023-01-31 0.6353716    g1
#> 11 0.47176668 2023-02-16 0.1573663    g1
#> 12 0.97491843 2023-02-10 0.4227252    g1

Call with axes specs.

cjs_example_data('scatter') %>%
  chartjs(type = 'scatter', x = x_numbers, y = y_numbers) %>% 
  # fix documentation of these
  cjs_scale_cartesian(id = 'y', title.text = 'Numbers on Y',
                      min = -0.2, max = 1.2) %>% 
  cjs_scale_cartesian(id = 'x', title.text = 'Numbers on X',
                      min = -0.2, max = 1.2)

Adding datasets and colouring

cjs_example_data('scatter') %>%
  chartjs() %>% 
  cjs_add_points(x = x_numbers, y = y_numbers, label = 'from source data') %>% 
  cjs_add_points(x = runif(12), y = runif(12), label = 'from vectors') %>% 
  cjs_add_points(x = x1, y = y1, label = 'from given data',
                 data = data.frame(x1 = runif(12), y1 = runif(12))) %>% 
  cjs_scale_color(backgroundColors = palette()[1:3])

Adding a line to the points

cjs_example_data('scatter') %>%
  chartjs() %>% 
  cjs_add_points(x = x_numbers, y = y_numbers, label = 'a', show_line = TRUE)
# arranges data
cjs_example_data('scatter') %>% 
  ggplot(aes(x = x_numbers, y = y_numbers)) +
  geom_point() +
  geom_line()

Point shape and sizes

unlist(cjs_shapes)
#>        circle         cross      crossRot          dash          line 
#>      "circle"       "cross"    "crossRot"        "dash"        "line" 
#>          rect   rectRounded       rectRot          star      triangle 
#>        "rect" "rectRounded"     "rectRot"        "star"    "triangle" 
#>         false 
#>       "FALSE"

cjs_example_data('scatter') %>%
  chartjs() %>% 
  cjs_add_points(x = x_numbers, y = y_numbers, label = 'a') %>% 
  cjs_add_points(x = runif(12), y = runif(12), label = 'b') %>% 
  cjs_add_points(x = x1, y = y1, label = 'c', data = data.frame(x1 = runif(12), y1 = runif(12))) %>% 
  cjs_scale_color(backgroundColors = c(a = '#181E20', b = '#045C94', c = '#FFBB1C'), match_background_and_border = T) %>% 
  cjs_scale_shape(pointStyles = c(cjs_shapes$circle, 'cross', cjs_shapes[['star']])) %>% 
  cjs_scale_size(pointRadii = c(5,10,2))

Doughnut and pie charts

Doughnut and pie fit in the same realm - doughnut_pie with a type= parameter

cjs_example_data('doughnut_pie')
#>   letters numbers group
#> 1       A       5    g1
#> 2       B       5    g1
#> 3       C       6    g1
#> 4       D       8    g1
#> 5       E       4    g1

Doughnut

cjs_example_data('doughnut_pie') %>% 
  chartjs() %>% 
  cjs_add_doughnut_pie(type = 'doughnut', x = letters, y = numbers)

Can stack .. needs work/QA

cjs_example_data('doughnut_pie') %>% 
  chartjs() %>% 
  cjs_add_doughnut_pie(type = 'doughnut', x = letters, y = numbers) %>% 
  cjs_add_doughnut_pie(type = 'doughnut', x = LETTERS[1:5], y = 1:5)

Pie

cjs_example_data('doughnut_pie') %>% 
  chartjs() %>% 
  cjs_add_doughnut_pie(type = 'pie', x = letters, y = numbers, colors = palette()[1:5])

cjs_theme

Needs work

cjs_example_data('bar') %>%
  chartjs(type = 'bar', x = letters, y = numbers) %>% 
  cjs_theme(chart.backgroundColor = 'pink', 
            title.text = 'A pink chart',
            legend.position = 'right')