d3-sankey-diagram
Version:
Sankey diagram d3 plugin
49 lines (44 loc) • 1.21 kB
JavaScript
import nestGraph from '../../src/sankeyLayout/nest-graph.js'
import tape from 'tape'
tape('nestGraph()', test => {
// 0|---\
// \
// 1|-\ -|
// \---|4
// 2|------|
// ,-|
// 3|---/
//
const nodes = [
{ id: '0', rank: 0, band: 0, depth: 0 },
{ id: '1', rank: 0, band: 1, depth: 0 },
{ id: '2', rank: 0, band: 1, depth: 2 },
{ id: '3', rank: 0, band: 1, depth: 1 },
{ id: '4', rank: 1, band: 1, depth: 0 }
]
const nested = nestGraph(nodes)
test.deepEqual(ids(nested), [
[['0'], ['1', '3', '2']],
[[], ['4']]
])
test.end()
})
tape('nestGraph() calculates band values', test => {
// 0 -- 2 : band x
//
// 1 -- 3 : band y
// `- 4 :
//
const nodes = [
{ id: '0', rank: 0, band: 0, depth: 0, value: 5 },
{ id: '1', rank: 1, band: 1, depth: 0, value: 25 },
{ id: '2', rank: 1, band: 0, depth: 0, value: 5 },
{ id: '3', rank: 2, band: 1, depth: 0, value: 10 },
{ id: '4', rank: 2, band: 1, depth: 1, value: 15 }
]
test.deepEqual(nestGraph(nodes).bandValues, [5, 25])
test.end()
})
function ids (layers) {
return layers.map(bands => bands.map(nodes => nodes.map(d => d.id)))
}