| Type: | Package | 
| Title: | Sunburst 'Htmlwidget' | 
| Version: | 2.1.8 | 
| Date: | 2023-02-05 | 
| Maintainer: | Kent Russell <kent.russell@timelyportfolio.com> | 
| URL: | https://github.com/timelyportfolio/sunburstR | 
| BugReports: | https://github.com/timelyportfolio/sunburstR/issues | 
| Description: | Make interactive 'd3.js' sequence sunburst diagrams in R with the convenience and infrastructure of an 'htmlwidget'. | 
| License: | MIT + file LICENSE | 
| Imports: | d3r (≥ 0.6.9), dplyr, htmlwidgets, htmltools | 
| Suggests: | jsonlite, knitr, markdown, pipeR, testthat, tidyr (≥ 0.7.0), rmarkdown | 
| Enhances: | treemap | 
| RoxygenNote: | 7.2.3 | 
| VignetteBuilder: | knitr | 
| NeedsCompilation: | no | 
| Packaged: | 2023-02-05 18:28:19 UTC; kentr | 
| Author: | Mike Bostock [aut, cph] (d3.js library, http://d3js.org),
  Kerry Rodden [aut, cph] (sequences library in htmlwidgets/lib,
    https://gist.github.com/kerryrodden/7090426),
  Kevin Warne [aut, cph] (d2b sunburst library in htmlwidgets/lib,
    https://github.com/d2bjs/d2b),
  Kent Russell [aut, cre] (R interface),
  Florian Breitwieser [ctb] (R interface),
  CJ Yetman | 
| Repository: | CRAN | 
| Date/Publication: | 2023-02-05 23:20:02 UTC | 
Add Shiny Events
Description
Add Shiny Events
Usage
add_shiny(sunburst = NULL)
Arguments
| sunburst | 
 | 
Value
sunburst htmlwidget
Examples
## Not run: 
library(shiny)
library(sunburstR)
sequences <- read.csv(
  system.file("examples/visit-sequences.csv",package="sunburstR")
  ,header=F
  ,stringsAsFactors = FALSE
)
server <- function(input,output,session){
  output$sunburst <- renderSunburst({
    #invalidateLater(1000, session)
    sequences <- sequences[sample(nrow(sequences),1000),]
    add_shiny(sunburst(sequences))
  })
  selection <- reactive({
    input$sunburst_mouseover
  })
  output$selection <- renderText(selection())
}
ui<-fluidPage(
  sidebarLayout(
    sidebarPanel(
    ),
    # plot sunburst
    mainPanel(
      sunburstOutput("sunburst"),
      textOutput("selection")
    )
  )
)
shinyApp(ui = ui, server = server)
# an example with d2b sunburst and Shiny
library(shiny)
library(sunburstR)
# use a sample of the sequences csv data
sequences <- read.csv(
  system.file("examples/visit-sequences.csv",package="sunburstR")
  ,header = FALSE
  ,stringsAsFactors = FALSE
)[1:200,]
# create a d2b sunburst
s2b <- sund2b(sequences)
options(shiny.trace=TRUE)
ui <- sund2bOutput("s2b")
server <- function(input, output, session) {
  output$s2b <- renderSund2b({
    add_shiny(s2b)
  })
}
shinyApp(ui, server)
## End(Not run)
Shiny bindings for d2b
Description
Output and render functions for using d2b within Shiny applications and interactive Rmd documents.
Usage
sund2bOutput(outputId, width = "100%", height = "400px")
renderSund2b(expr, env = parent.frame(), quoted = FALSE)
Arguments
| outputId | output variable to read from | 
| width,height | Must be a valid CSS unit (like  | 
| expr | An expression that generates a d2b | 
| env | The environment in which to evaluate  | 
| quoted | Is  | 
'd3.js' Sequence Sunburst Diagrams
Description
Sequences sunburst diagrams provide an interactive method of exploring sequence data, such as website navigation paths.
Usage
sunburst(
  data = NULL,
  legendOrder = NULL,
  colors = NULL,
  valueField = "size",
  percent = TRUE,
  count = FALSE,
  explanation = NULL,
  breadcrumb = list(),
  legend = list(),
  sortFunction = NULL,
  sumNodes = TRUE,
  withD3 = FALSE,
  width = NULL,
  height = NULL,
  elementId = NULL,
  sizingPolicy = NULL,
  csvdata = NULL,
  jsondata = NULL
)
Arguments
| data | data in csv source,target form or in
nested d3 JSON hierarchy with 'name:...,  children:[];'.   | 
| legendOrder | string vector if you would like to manually order the legend. If legendOrder is not provided, then the legend will be in the descending order of the top level hierarchy. | 
| colors | 
 | 
| valueField | 
 | 
| percent | 
 | 
| count | 
 | 
| explanation | JavaScript function to define a custom explanation for the center
of the sunburst.  Note, this will override  | 
| breadcrumb | 
 | 
| legend | 
 | 
| sortFunction | 
 | 
| sumNodes | 
 | 
| withD3 | 
 | 
| height,width | height and width of sunburst htmlwidget containing div
specified in any valid  | 
| elementId | string id as a valid  | 
| sizingPolicy | see  | 
| csvdata | 
 | 
| jsondata | 
 | 
Examples
library(sunburstR)
# read in sample visit-sequences.csv data provided in source
# only use first 100 rows to speed package build and check
#   https://gist.github.com/kerryrodden/7090426#file-visit-sequences-csv
sequences <- read.csv(
  system.file("examples/visit-sequences.csv",package="sunburstR")
  ,header = FALSE
  ,stringsAsFactors = FALSE
)[1:100,]
sunburst(sequences)
## Not run: 
# explore some of the arguments
sunburst(
  sequences
  ,count = TRUE
)
sunburst(
  sequences
  # apply sort order to the legends
  ,legendOrder = unique(unlist(strsplit(sequences[,1],"-")))
  # just provide the name in the explanation in the center
  ,explanation = "function(d){return d.data.name}"
)
# try with json data
sequence_json <- jsonlite::fromJSON(
  system.file("examples/visit-sequences.json",package="sunburstR"),
  simplifyDataFrame = FALSE
)
sunburst(sequence_json)
# try with csv data from this fork
#  https://gist.github.com/mkajava/7515402
# great use for new breadbrumb wrapping
sunburst(
  csvdata = read.csv(
    file = paste0(
      "https://gist.githubusercontent.com/mkajava/",
      "7515402/raw/9f80d28094dc9dfed7090f8fb3376ef1539f4fd2/",
      "comment-sequences.csv"
    )
    ,header = TRUE
    ,stringsAsFactors = FALSE
  )
)
# try with csv data from this fork
#  https://gist.github.com/rileycrane/92a2c36eb932b4f99e51/
sunburst( csvdata = read.csv(
  file = paste0(
    "https://gist.githubusercontent.com/rileycrane/",
    "92a2c36eb932b4f99e51/raw/",
    "a0212b4ca8043af47ec82369aa5f023530279aa3/visit-sequences.csv"
  )
  ,header=FALSE
  ,stringsAsFactors = FALSE
))
## End(Not run)
## Not run: 
#  use sunburst to analyze ngram data from Peter Norvig
#    http://norvig.com/mayzner.html
library(sunburstR)
library(pipeR)
#  read the csv data downloaded from the Google Fusion Table linked in the article
ngrams2 <- read.csv(
  system.file(
    "examples/ngrams2.csv"
    ,package="sunburstR"
  )
  , stringsAsFactors = FALSE
)
ngrams2 %>>%
  #  let's look at ngrams at the start of a word, so columns 1 and 3
  (.[,c(1,3)]) %>>%
  #  split the ngrams into a sequence by splitting each letter and adding -
  (
    data.frame(
      sequence = strsplit(.[,1],"") %>>%
        lapply( function(ng){ paste0(ng,collapse = "-") } ) %>>%
        unlist
      ,freq = .[,2]
      ,stringsAsFactors = FALSE
    )
  ) %>>%
  sunburst
library(htmltools)
ngrams2 %>>%
  (
    lapply(
      seq.int(3,ncol(.))
      ,function(letpos){
        (.[,c(1,letpos)]) %>>%
          #  split the ngrams into a sequence by splitting each letter and adding -
          (
            data.frame(
              sequence = strsplit(.[,1],"") %>>%
                lapply( function(ng){ paste0(ng,collapse = "-") } ) %>>%
                unlist
              ,freq = .[,2]
              ,stringsAsFactors = FALSE
            )
          ) %>>%
          ( tags$div(style="float:left;",sunburst( ., height = 300, width = 300 )) )
      }
    )
  ) %>>%
  tagList %>>%
  browsable
## End(Not run)
## Not run: 
  library(treemap)
  library(sunburstR)
  library(d3r)
  # use example from ?treemap::treemap
  data(GNI2014)
  tm <- treemap(GNI2014,
          index=c("continent", "iso3"),
          vSize="population",
          vColor="continent",
          type="index")
  tm_nest <- d3_nest(
    tm$tm[,c("continent", "iso3", "vSize", "color")],
    value_cols = c("vSize", "color")
  )
  sunburst(
    data = tm_nest,
    valueField = "vSize",
    count = TRUE,
    # to avoid double counting with pre-summed trees
    # use sumNodes = FALSE
    sumNodes = FALSE,
    colors = htmlwidgets::JS("function(d){return d3.select(this).datum().data.color;}"),
    withD3 = TRUE
  )
## End(Not run)
# calendar sunburst example
library(sunburstR)
df <- data.frame(
  date = seq.Date(
    as.Date('2014-01-01'),
    as.Date('2016-12-31'),
    by = "days"
  ),
  stringsAsFactors = FALSE
)
df$year = format(df$date, "%Y")
df$quarter = paste0("Q", ceiling(as.numeric(format(df$date,"%m"))/3))
df$month = format(df$date, "%b")
df$path = paste(df$year, df$quarter, df$month, sep="-")
df$count = rep(1, nrow(df))
sunburst(
  data.frame(xtabs(count~path,df)),
  # added a degree of difficulty by providing
  #  not easily sortable names
  sortFunction = htmlwidgets::JS(
"
function(a,b){
  abb = {
    2014:-7,
    2015:-6,
    2016:-5,
    Q1:-4,
    Q2:-3,
    Q3:-2,
    Q4:-1,
    Jan:1,
    Feb:2,
    Mar:3,
    Apr:4,
    May:5,
    Jun:6,
    Jul:7,
    Aug:8,
    Sep:9,
    Oct:10,
    Nov:11,
    Dec:12
  }
  return abb[a.data.name] - abb[b.data.name];
}
"
  )
)
# sorting example: place data in order of occurence
library(sunburstR)
df <- data.frame(
  group = c("foo", "bar", "xyz"),
  value = c(1, 3, 2)
)
sunburst(df,
         # create a trivial sort function
         sortFunction = htmlwidgets::JS('function(x) {return x;}'))
new_order <- c(3,2,1)
sunburst(df[new_order,],
         sortFunction = htmlwidgets::JS('function(x) {return x;}'))
Shiny bindings for sunburst
Description
Output and render functions for using sunburst within Shiny applications and interactive Rmd documents.
Usage
sunburstOutput(outputId, width = "100%", height = "400px")
renderSunburst(expr, env = parent.frame(), quoted = FALSE)
Arguments
| outputId | output variable to read from | 
| width,height | Must be a valid CSS unit (like  | 
| expr | An expression that generates a sunburst | 
| env | The environment in which to evaluate  | 
| quoted | Is  | 
Sunburst Using 'd2b'
Description
Create interactive sunburst chart with the 'd2b' charting library.
Usage
sund2b(
  data = NULL,
  colors = NULL,
  valueField = "size",
  tooltip = NULL,
  breadcrumbs = NULL,
  rootLabel = NULL,
  showLabels = FALSE,
  width = NULL,
  height = NULL,
  elementId = NULL
)
Arguments
| data | data in csv source,target form or in
nested d3 JSON hierarchy with 'name:...,  children:[];'.   | 
| colors | 
 | 
| valueField | 
 | 
| tooltip | 
 | 
| breadcrumbs | 
 | 
| rootLabel | 
 | 
| showLabels | 
 | 
| height,width | height and width of sunburst htmlwidget containing div
specified in any valid  | 
| elementId | string id as a valid  | 
Examples
if(interactive()){
  # The sund2b() API mirrors sunburst() with fewer arguments.
  library(sunburstR)
  # use a sample of the sequences csv data
  sequences <- read.csv(
    system.file("examples/visit-sequences.csv",package="sunburstR")
    ,header = FALSE
    ,stringsAsFactors = FALSE
  )[1:200,]
  # create a d2b sunburst
  sund2b(sequences)
  # show labels
  sund2b(sequences, showLabels = TRUE)
  # change the colors
  #   using d3.js categorical color scheme
  sund2b(
    sequences,
    colors = htmlwidgets::JS("d3.scaleOrdinal(d3.schemeCategory20b)")
  )
}
## Not run: 
#  using RColorBrewer palette
sund2b(
  sequences,
  colors = list(range = RColorBrewer::brewer.pal(9, "Set3"))
)
#  using a color column from the R dataset
#  treemap has an amazing treecolors ability
library(treemap)
library(d3r)
rhd <- random.hierarchical.data()
tm <- treemap(
  rhd,
  index = paste0("index", 1:3),
  vSize = "x",
  draw = FALSE
)$tm
sund2b(
  d3_nest(tm, value_cols = colnames(tm)[-(1:3)]),
  colors = htmlwidgets::JS(
    # yes this is a little different, so please pay attention
    #  "function(d) {return d.color}" will not work
    "function(name, d){return d.color || '#ccc';}"
  ),
  valueField = "vSize"
)
# use sund2b in Shiny
library(shiny)
ui <- sund2bOutput("sun")
server <- function(input, output, session) {
  output$sun <- renderSund2b({
    sund2b(sequences)
  })
}
shinyApp(ui, server)
## End(Not run)
Advanced Customization of 'd2b' Breadcrumb
Description
Advanced Customization of 'd2b' Breadcrumb
Usage
sund2bBreadcrumb(enabled = NULL, html = NULL, orient = NULL)
Arguments
| enabled | 
 | 
| html | 
 | 
| orient | 
 | 
Value
list
Examples
if(interactive()){
library(sunburstR)
# use a sample of the sequences csv data
sequences <- read.csv(
  system.file("examples/visit-sequences.csv",package="sunburstR")
  ,header = FALSE
  ,stringsAsFactors = FALSE
)[1:200,]
# disable the breadcrumb
sund2b(
  sequences,
  breadcrumbs = sund2bBreadcrumb(
    enabled = FALSE
  )
)
# change the breadcrumb content
sund2b(
  sequences,
  breadcrumbs = sund2bBreadcrumb(
    html = htmlwidgets::JS("
function(nodedata, size, percent) {
  return '<span style=\"font-weight: bold;\">' + nodedata.name + '</span>' + ' ' + size
}
    ")
  )
)
}
Advanced Customization of 'd2b' Tooltip
Description
Advanced Customization of 'd2b' Tooltip
Usage
sund2bTooltip(at = NULL, followMouse = NULL, html = NULL, my = NULL)
Arguments
| at | 
 | 
| followMouse | 
 | 
| html | 
 | 
| my | 
 | 
Value
list
Examples
if(interactive()){
library(sunburstR)
# use a sample of the sequences csv data
sequences <- read.csv(
  system.file("examples/visit-sequences.csv",package="sunburstR")
  ,header = FALSE
  ,stringsAsFactors = FALSE
)[1:200,]
# change the tooltip
sund2b(
  sequences,
  tooltip = sund2bTooltip(
    html = htmlwidgets::JS("
function(nodedata, size, percent) {
  return '<span style=\"font-weight: bold;\">' + nodedata.name + '</span>' + ' ' + size
}
    ")
  )
)
}