Title: | Interactive Collapsible Tree Diagrams using 'D3.js' |
---|---|
Description: | Interactive Reingold-Tilford tree diagrams created using 'D3.js', where every node can be expanded and collapsed by clicking on it. Tooltips and color gradients can be mapped to nodes using a numeric column in the source data frame. See 'collapsibleTree' website for more information and examples. |
Authors: | Adeel Khan [aut, cre], Dhrumin Shah [ctb], Mike Bostock [ctb, cph] (D3.js library, http://d3js.org) |
Maintainer: | Adeel Khan <[email protected]> |
License: | GPL (>= 3) |
Version: | 0.1.8 |
Built: | 2024-11-08 02:56:35 UTC |
Source: | https://github.com/adeelk93/collapsibletree |
Interactive Reingold-Tilford tree diagram created using D3.js, where every node can be expanded and collapsed by clicking on it.
collapsibleTree( df, ..., inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", linkLength = NULL, fontSize = 10, tooltip = FALSE, tooltipHtml = NULL, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL ) ## S3 method for class 'data.frame' collapsibleTree( df, hierarchy, root = deparse(substitute(df)), inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", fillByLevel = TRUE, linkLength = NULL, fontSize = 10, tooltip = FALSE, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL, ... ) ## S3 method for class 'Node' collapsibleTree( df, hierarchy_attribute = "level", root = df$name, inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", linkLength = NULL, fontSize = 10, tooltip = FALSE, tooltipHtml = NULL, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL, ... )
collapsibleTree( df, ..., inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", linkLength = NULL, fontSize = 10, tooltip = FALSE, tooltipHtml = NULL, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL ) ## S3 method for class 'data.frame' collapsibleTree( df, hierarchy, root = deparse(substitute(df)), inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", fillByLevel = TRUE, linkLength = NULL, fontSize = 10, tooltip = FALSE, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL, ... ) ## S3 method for class 'Node' collapsibleTree( df, hierarchy_attribute = "level", root = df$name, inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", linkLength = NULL, fontSize = 10, tooltip = FALSE, tooltipHtml = NULL, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL, ... )
df |
a |
... |
other arguments to pass onto S3 methods that implement
this generic function - |
inputId |
the input slot that will be used to access the selected node (for Shiny). Will return a named list of the most recently clicked node, along with all of its parents. |
attribute |
numeric column not listed in hierarchy that will be used for tooltips, if applicable. Defaults to 'leafCount', which is the cumulative count of a node's children |
aggFun |
aggregation function applied to the attribute column to determine
values of parent nodes. Defaults to |
fill |
either a single color or a mapping of colors:
|
linkLength |
length of the horizontal links that connect nodes in pixels. (optional, defaults to automatic sizing) |
fontSize |
font size of the label text in pixels |
tooltip |
tooltip shows the node's label and attribute value. |
tooltipHtml |
column name (possibly containing html) to override default tooltip
contents, allowing for more advanced customization. Applicable only for |
nodeSize |
numeric column that will be used to determine relative node size. Default is to have a constant node size throughout. 'leafCount' can also be used here (cumulative count of a node's children), or 'count' (count of node's immediate children). |
collapsed |
the tree's children will start collapsed by default
|
zoomable |
pan and zoom by dragging and scrolling |
width |
width in pixels (optional, defaults to automatic sizing) |
height |
height in pixels (optional, defaults to automatic sizing) |
hierarchy |
a character vector of column names that define the order
and hierarchy of the tree network. Applicable only for |
root |
label for the root node |
fillByLevel |
which order to assign fill values to nodes.
|
hierarchy_attribute |
name of the |
Christopher Gandrud: http://christophergandrud.github.io/networkD3/.
d3noob: https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd.
collapsibleTree(warpbreaks, c("wool", "tension", "breaks")) # Data from US Forest Service DataMart species <- read.csv(system.file("extdata/species.csv", package = "collapsibleTree")) collapsibleTree(df = species, c("REGION", "CLASS", "NAME"), fill = "green") # Visualizing the order in which the node colors are filled library(RColorBrewer) collapsibleTree( warpbreaks, c("wool", "tension"), fill = brewer.pal(9, "RdBu"), fillByLevel = TRUE ) collapsibleTree( warpbreaks, c("wool", "tension"), fill = brewer.pal(9, "RdBu"), fillByLevel = FALSE ) # Tooltip can be mapped to an attribute, or default to leafCount collapsibleTree( warpbreaks, c("wool", "tension", "breaks"), tooltip = TRUE, attribute = "breaks" ) # Node size can be mapped to any numeric column, or to leafCount collapsibleTree( warpbreaks, c("wool", "tension", "breaks"), nodeSize = "breaks" ) # collapsibleTree.Node example data(acme, package="data.tree") acme$Do(function(node) node$cost <- data.tree::Aggregate(node, attribute = "cost", aggFun = sum)) acme$Do(function(node) node$lessThanMillion <- node$cost < 10^6) collapsibleTree( acme, nodeSize = "cost", attribute = "cost", tooltip = TRUE, collapsed = "lessThanMillion" ) # Emulating collapsibleTree.data.frame using collapsibleTree.Node species <- read.csv(system.file("extdata/species.csv", package = "collapsibleTree")) hierarchy <- c("REGION", "CLASS", "NAME") species$pathString <- paste( "species", apply(species[,hierarchy], 1, paste, collapse = "//"), sep = "//" ) df <- data.tree::as.Node(species, pathDelimiter = "//") collapsibleTree(df)
collapsibleTree(warpbreaks, c("wool", "tension", "breaks")) # Data from US Forest Service DataMart species <- read.csv(system.file("extdata/species.csv", package = "collapsibleTree")) collapsibleTree(df = species, c("REGION", "CLASS", "NAME"), fill = "green") # Visualizing the order in which the node colors are filled library(RColorBrewer) collapsibleTree( warpbreaks, c("wool", "tension"), fill = brewer.pal(9, "RdBu"), fillByLevel = TRUE ) collapsibleTree( warpbreaks, c("wool", "tension"), fill = brewer.pal(9, "RdBu"), fillByLevel = FALSE ) # Tooltip can be mapped to an attribute, or default to leafCount collapsibleTree( warpbreaks, c("wool", "tension", "breaks"), tooltip = TRUE, attribute = "breaks" ) # Node size can be mapped to any numeric column, or to leafCount collapsibleTree( warpbreaks, c("wool", "tension", "breaks"), nodeSize = "breaks" ) # collapsibleTree.Node example data(acme, package="data.tree") acme$Do(function(node) node$cost <- data.tree::Aggregate(node, attribute = "cost", aggFun = sum)) acme$Do(function(node) node$lessThanMillion <- node$cost < 10^6) collapsibleTree( acme, nodeSize = "cost", attribute = "cost", tooltip = TRUE, collapsed = "lessThanMillion" ) # Emulating collapsibleTree.data.frame using collapsibleTree.Node species <- read.csv(system.file("extdata/species.csv", package = "collapsibleTree")) hierarchy <- c("REGION", "CLASS", "NAME") species$pathString <- paste( "species", apply(species[,hierarchy], 1, paste, collapse = "//"), sep = "//" ) df <- data.tree::as.Node(species, pathDelimiter = "//") collapsibleTree(df)
Output and render functions for using collapsibleTree within Shiny applications and interactive Rmd documents.
collapsibleTreeOutput(outputId, width = "100%", height = "400px") renderCollapsibleTree(expr, env = parent.frame(), quoted = FALSE)
collapsibleTreeOutput(outputId, width = "100%", height = "400px") renderCollapsibleTree(expr, env = parent.frame(), quoted = FALSE)
outputId |
output variable to read from |
width , height
|
Must be a valid CSS unit (like |
expr |
An expression that generates a collapsibleTree |
env |
The environment in which to evaluate |
quoted |
Is |
if(interactive()) { # Shiny Interaction shiny::runApp(system.file("examples/02shiny", package = "collapsibleTree")) # Interactive Gradient Mapping shiny::runApp(system.file("examples/03shiny", package = "collapsibleTree")) }
if(interactive()) { # Shiny Interaction shiny::runApp(system.file("examples/02shiny", package = "collapsibleTree")) # Interactive Gradient Mapping shiny::runApp(system.file("examples/03shiny", package = "collapsibleTree")) }
Interactive Reingold-Tilford tree diagram created using D3.js,
where every node can be expanded and collapsed by clicking on it.
This function serves as a convenience wrapper for network style data frames
containing the node's parent in the first column, node parent in the second
column, and additional attributes in the rest of the columns. The root node
is denoted by having an NA
for a parent. There must be exactly 1 root.
collapsibleTreeNetwork( df, inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", linkLength = NULL, fontSize = 10, tooltip = TRUE, tooltipHtml = NULL, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL )
collapsibleTreeNetwork( df, inputId = NULL, attribute = "leafCount", aggFun = sum, fill = "lightsteelblue", linkLength = NULL, fontSize = 10, tooltip = TRUE, tooltipHtml = NULL, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL )
df |
a network data frame (where every row is a node) from which to construct a nested list
|
inputId |
the input slot that will be used to access the selected node (for Shiny).
Will return a named list of the most recently clicked node,
along with all of its parents.
(For |
attribute |
numeric column not listed in hierarchy that will be used as weighting to define the color gradient across nodes. Defaults to 'leafCount', which colors nodes by the cumulative count of its children |
aggFun |
aggregation function applied to the attribute column to determine
values of parent nodes. Defaults to |
fill |
either a single color or a column name with the color for each node |
linkLength |
length of the horizontal links that connect nodes in pixels. (optional, defaults to automatic sizing) |
fontSize |
font size of the label text in pixels |
tooltip |
tooltip shows the node's label and attribute value. |
tooltipHtml |
column name (possibly containing html) to override default tooltip contents, allowing for more advanced customization |
nodeSize |
numeric column that will be used to determine relative node size. Default is to have a constant node size throughout. 'leafCount' can also be used here (cumulative count of a node's children), or 'count' (count of node's immediate children). |
collapsed |
the tree's children will start collapsed by default. Can also be a logical value found in the data for conditionally collapsing nodes. |
zoomable |
pan and zoom by dragging and scrolling |
width |
width in pixels (optional, defaults to automatic sizing) |
height |
height in pixels (optional, defaults to automatic sizing) |
Christopher Gandrud: http://christophergandrud.github.io/networkD3/.
d3noob: https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd.
FromDataFrameNetwork
for underlying function
that constructs trees from the network data frame
# Create a simple org chart org <- data.frame( Manager = c( NA, "Ana", "Ana", "Bill", "Bill", "Bill", "Claudette", "Claudette", "Danny", "Fred", "Fred", "Grace", "Larry", "Larry", "Nicholas", "Nicholas" ), Employee = c( "Ana", "Bill", "Larry", "Claudette", "Danny", "Erika", "Fred", "Grace", "Henri", "Ida", "Joaquin", "Kate", "Mindy", "Nicholas", "Odette", "Peter" ), Title = c( "President", "VP Operations", "VP Finance", "Director", "Director", "Scientist", "Manager", "Manager", "Jr Scientist", "Operator", "Operator", "Associate", "Analyst", "Director", "Accountant", "Accountant" ) ) collapsibleTreeNetwork(org, attribute = "Title") # Add in colors and sizes org$Color <- org$Title levels(org$Color) <- colorspace::rainbow_hcl(11) collapsibleTreeNetwork( org, attribute = "Title", fill = "Color", nodeSize = "leafCount", collapsed = FALSE ) # Use unsplash api to add in random photos to tooltip org$tooltip <- paste0( org$Employee, "<br>Title: ", org$Title, "<br><img src='https://source.unsplash.com/collection/385548/150x100'>" ) collapsibleTreeNetwork( org, attribute = "Title", fill = "Color", nodeSize = "leafCount", tooltipHtml = "tooltip", collapsed = FALSE )
# Create a simple org chart org <- data.frame( Manager = c( NA, "Ana", "Ana", "Bill", "Bill", "Bill", "Claudette", "Claudette", "Danny", "Fred", "Fred", "Grace", "Larry", "Larry", "Nicholas", "Nicholas" ), Employee = c( "Ana", "Bill", "Larry", "Claudette", "Danny", "Erika", "Fred", "Grace", "Henri", "Ida", "Joaquin", "Kate", "Mindy", "Nicholas", "Odette", "Peter" ), Title = c( "President", "VP Operations", "VP Finance", "Director", "Director", "Scientist", "Manager", "Manager", "Jr Scientist", "Operator", "Operator", "Associate", "Analyst", "Director", "Accountant", "Accountant" ) ) collapsibleTreeNetwork(org, attribute = "Title") # Add in colors and sizes org$Color <- org$Title levels(org$Color) <- colorspace::rainbow_hcl(11) collapsibleTreeNetwork( org, attribute = "Title", fill = "Color", nodeSize = "leafCount", collapsed = FALSE ) # Use unsplash api to add in random photos to tooltip org$tooltip <- paste0( org$Employee, "<br>Title: ", org$Title, "<br><img src='https://source.unsplash.com/collection/385548/150x100'>" ) collapsibleTreeNetwork( org, attribute = "Title", fill = "Color", nodeSize = "leafCount", tooltipHtml = "tooltip", collapsed = FALSE )
Interactive Reingold-Tilford tree diagram created using D3.js, where every node can be expanded and collapsed by clicking on it. This function serves as a convenience wrapper to add color gradients to nodes either by counting that node's children (default) or specifying another numeric column in the input data frame.
collapsibleTreeSummary( df, hierarchy, root = deparse(substitute(df)), inputId = NULL, attribute = "leafCount", fillFun = colorspace::heat_hcl, maxPercent = 25, percentOfParent = FALSE, linkLength = NULL, fontSize = 10, tooltip = TRUE, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL, ... )
collapsibleTreeSummary( df, hierarchy, root = deparse(substitute(df)), inputId = NULL, attribute = "leafCount", fillFun = colorspace::heat_hcl, maxPercent = 25, percentOfParent = FALSE, linkLength = NULL, fontSize = 10, tooltip = TRUE, nodeSize = NULL, collapsed = TRUE, zoomable = TRUE, width = NULL, height = NULL, ... )
df |
a data frame (where every row is a leaf) from which to construct a nested list |
hierarchy |
a character vector of column names that define the order and hierarchy of the tree network |
root |
label for the root node |
inputId |
the input slot that will be used to access the selected node (for Shiny). Will return a named list of the most recently clicked node, along with all of its parents. |
attribute |
numeric column not listed in hierarchy that will be used as weighting to define the color gradient across nodes. Defaults to 'leafCount', which colors nodes by the cumulative count of its children |
fillFun |
function that takes its first argument and returns a vector of colors of that length. rainbow_hcl is a good example. |
maxPercent |
highest weighting percent to use in color scale mapping. All numbers above this value will be treated as the same maximum value for the sake of coloring in the nodes (but not the ordering of nodes). Setting this value too high will make it difficult to tell the difference between nodes with many children. |
percentOfParent |
toggle attribute tooltip to be percent of parent rather than the actual value of attribute |
linkLength |
length of the horizontal links that connect nodes in pixels. (optional, defaults to automatic sizing) |
fontSize |
font size of the label text in pixels |
tooltip |
tooltip shows the node's label and attribute value. |
nodeSize |
numeric column that will be used to determine relative node size. Default is to have a constant node size throughout. 'leafCount' can also be used here (cumulative count of a node's children), or 'count' (count of node's immediate children). |
collapsed |
the tree's children will start collapsed by default (There is no conditional collapsing in this function yet, but it could be implemented if there's sufficient demand) |
zoomable |
pan and zoom by dragging and scrolling |
width |
width in pixels (optional, defaults to automatic sizing) |
height |
height in pixels (optional, defaults to automatic sizing) |
... |
other arguments passed on to |
Christopher Gandrud: http://christophergandrud.github.io/networkD3/.
d3noob: https://bl.ocks.org/d3noob/43a860bc0024792f8803bba8ca0d5ecd.
# Color in by number of children collapsibleTreeSummary(warpbreaks, c("wool", "tension", "breaks"), maxPercent = 50) # Color in by the value of breaks and use the terrain_hcl gradient collapsibleTreeSummary( warpbreaks, c("wool", "tension", "breaks"), attribute = "breaks", fillFun = colorspace::terrain_hcl, maxPercent = 50 )
# Color in by number of children collapsibleTreeSummary(warpbreaks, c("wool", "tension", "breaks"), maxPercent = 50) # Color in by the value of breaks and use the terrain_hcl gradient collapsibleTreeSummary( warpbreaks, c("wool", "tension", "breaks"), attribute = "breaks", fillFun = colorspace::terrain_hcl, maxPercent = 50 )