|
- ---
- output: js4shiny::html_document_js
- ---
-
- ```{r htmldeps, echo=FALSE}
- library(htmltools)
- library(dplyr)
- library(tidyr)
- library(babynames)
-
- tagList(
- div(id = "chart"),
- htmltools::htmlDependency(
- name = "frappe-charts",
- version = "1.3.0",
- package = "frappeCharts",
- src = "htmlwidgets/lib/frappe-charts",
- script = "frappe-charts.min.iife.js",
- all_files = TRUE
- )
- )
- ```
-
- ```{r data}
- data <-
- babynames %>%
- filter(
- name %in% c("Ruth", "August"),
- year >= 1980
- ) %>%
- group_by(year, name) %>%
- summarize(n = sum(n)) %>%
- ungroup() %>%
- pivot_wider(year, name, values_from = n)
-
- data[1:5, ]
-
- opts <- list(
- title = "My AwesomeR Chart",
- type = "line",
- height = 250,
- colors = c("#466683", "#44bc96"),
- data = data,
- lineOptions = list(regionFill = TRUE, hideDots = FALSE),
- axisOptions = list(xIsSeries = TRUE),
- isNavigable = c(TRUE, TRUE)
- )
-
- tags$script(
- id = "chart-opts",
- type = "application/json",
- htmlwidgets:::toJSON(opts)
- )
- ```
-
- ```{js}
- let x = document.getElementById('chart-opts')
- x = JSON.parse(x.textContent)
-
- const chartData = {labels: [], datasets: []}
-
- // Get keys of data, assume that first entry is for labels, the rest are data
- let labelColumn = Object.keys(x.data)[0]
- let columns = Object.keys(x.data).slice(1)
-
- // First column in x.data is the labels
- chartData.labels = x.data[labelColumn]
-
- // Create an appropriate object for each column, reformat data and add to chartData
- columns.forEach(function(col) {
- chartData.datasets.push({name: col, values: x.data[col]})
- })
-
- x.data = chartData
-
- const chart = new frappe.Chart("#chart", x)
- ```
|