Public
Edited
Feb 17, 2021
Importers
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
height = 800
Insert cell
forest_padding = 24
Insert cell
Insert cell
Insert cell
data = {
function walk(n) {
let o = {
name: n.label
}
if(n.children) {
o.children = n.children.map(d => walk(d))
}
else {
o.value = n.population
}
return o
}
return walk(tree)
}
Insert cell
Insert cell
forest_stats = forest.map(tree => ({
count: tree.children.length
}))
Insert cell
Insert cell
mutable selection_a = null
Insert cell
mutable selection_b = null
Insert cell
Insert cell
hierarchy = d => d3.hierarchy(d)
.sum(d => d.value)
.sort((a, b) => b.value - a.value)
Insert cell
Insert cell
Insert cell
forest = {
let trees = [ubertree]
d3.range(ubertree.height-1).forEach(level => {
let prev = trees[trees.length-1]
let current = hierarchy({
name: '',
children: [].concat(...prev.data.children.map(c => c.children ? c.children : []))
})
current.value = ubertree.value // all treemaps have the same scale
trees.push(current)
})
return trees
}
Insert cell
treemap = tree => d3.treemap()
.tile(d3.treemapSquarify)
.size([width-1, height/forest.length-forest_padding-1])
.paddingInner(1)
.paddingBottom(d => d.depth == 0 && tree != forest[forest.length-1] ? 12 : 0)
.round(true)
(tree)
Insert cell
treemap_nodes = forest.map(d => treemap(d).descendants())
Insert cell
format = d3.format(",d")
Insert cell
Insert cell
d3 = require("d3@5")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more