Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

78 lines
1.6KB

  1. ---
  2. output: js4shiny::html_document_js
  3. ---
  4. ```{r htmldeps, echo=FALSE}
  5. library(htmltools)
  6. library(dplyr)
  7. library(tidyr)
  8. library(babynames)
  9. tagList(
  10. div(id = "chart"),
  11. htmltools::htmlDependency(
  12. name = "frappe-charts",
  13. version = "1.3.0",
  14. package = "frappeCharts",
  15. src = "htmlwidgets/lib/frappe-charts",
  16. script = "frappe-charts.min.iife.js",
  17. all_files = TRUE
  18. )
  19. )
  20. ```
  21. ```{r data}
  22. data <-
  23. babynames %>%
  24. filter(
  25. name %in% c("Ruth", "August"),
  26. year >= 1980
  27. ) %>%
  28. group_by(year, name) %>%
  29. summarize(n = sum(n)) %>%
  30. ungroup() %>%
  31. pivot_wider(year, name, values_from = n)
  32. data[1:5, ]
  33. opts <- list(
  34. title = "My AwesomeR Chart",
  35. type = "line",
  36. height = 250,
  37. colors = c("#466683", "#44bc96"),
  38. data = data,
  39. lineOptions = list(regionFill = TRUE, hideDots = FALSE),
  40. axisOptions = list(xIsSeries = TRUE),
  41. isNavigable = c(TRUE, TRUE)
  42. )
  43. tags$script(
  44. id = "chart-opts",
  45. type = "application/json",
  46. htmlwidgets:::toJSON(opts)
  47. )
  48. ```
  49. ```{js}
  50. let x = document.getElementById('chart-opts')
  51. x = JSON.parse(x.textContent)
  52. const chartData = {labels: [], datasets: []}
  53. // Get keys of data, assume that first entry is for labels, the rest are data
  54. let labelColumn = Object.keys(x.data)[0]
  55. let columns = Object.keys(x.data).slice(1)
  56. // First column in x.data is the labels
  57. chartData.labels = x.data[labelColumn]
  58. // Create an appropriate object for each column, reformat data and add to chartData
  59. columns.forEach(function(col) {
  60. chartData.datasets.push({name: col, values: x.data[col]})
  61. })
  62. x.data = chartData
  63. const chart = new frappe.Chart("#chart", x)
  64. ```