-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathtreemap.js
More file actions
80 lines (68 loc) · 2.37 KB
/
treemap.js
File metadata and controls
80 lines (68 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/******************************************************************************
*
* Copyright (c) 2017, the Perspective Authors.
*
* This file is part of the Perspective library, distributed under the terms of
* the Apache License 2.0. The full license can be found in the LICENSE file.
*
*/
import * as d3 from "d3";
import {treeColor} from "../series/treemap/treemapColor";
import {treeData} from "../data/treeData";
import {treemapSeries} from "../series/treemap/treemapSeries";
import {tooltip} from "../tooltip/tooltip";
import {gridLayoutMultiChart} from "../layout/gridLayoutMultiChart";
import {colorRangeLegend} from "../legend/colorRangeLegend";
function treemap(container, settings) {
if (settings.crossValues.length === 0) {
console.warn("Unable to render a chart in the absence of any groups.");
return;
}
if (!settings.treemaps) settings.treemaps = {};
const data = treeData(settings);
const color = treeColor(
settings,
data.map(d => d.data)
);
if (color) {
this._container.classList.add("has-legend");
}
const treemapGrid = gridLayoutMultiChart().elementsPrefix("treemap");
container.datum(data).call(treemapGrid);
if (color) {
const legend = colorRangeLegend().scale(color);
container.call(legend);
}
const treemapEnter = treemapGrid.chartEnter();
const treemapDiv = treemapGrid.chartDiv();
const treemapTitle = treemapGrid.chartTitle();
treemapTitle.each((d, i, nodes) => d3.select(nodes[i]).text(d.split));
treemapEnter
.merge(treemapDiv)
.select("svg")
.select("g.treemap")
.each(function({split, data}) {
const treemapSvg = d3.select(this);
if (!settings.treemaps[split]) settings.treemaps[split] = {};
treemapSeries()
.settings(settings.treemaps[split])
.data(data)
.container(d3.select(d3.select(this.parentNode).node().parentNode))
.color(color)(treemapSvg);
tooltip()
.settings(settings)
.centered(true)(treemapSvg.selectAll("g"));
});
}
treemap.plugin = {
type: "d3_treemap",
name: "Treemap",
max_cells: 5000,
max_columns: 50,
initial: {
type: "number",
count: 1,
names: ["Size", "Color", "Tooltip"]
}
};
export default treemap;