First, include voronoi.min.js
:
<script type="text/javascript" src="voronoi.min.js></script>
initialization:
var width = 800, height = 600; var data = { children: [ {children: [ {value: 100}, {value: 200}, {value: 300} ]}, {children: [ {value: 100}, {value: 500}, {value: 900} ]} ] }; var clip = Voronoi.Polygon.create(width, height, 20); var treemap = new Voronoi.Treemap(data, clip, width, height);
update and render:
setInterval(function() { treemap.compute(); render(); }, 100);
Sample renderer with d3.js:
/* render polygons */ d3.selectAll("path").data(treemap.getPolygons()) .enter().append("path").attr({ d: function(it) { ... } }); /* render centroid of polygons */ d3.selectAll("circle").data(treemap.getSites()) .enter().append("circle").attr({ cx: function(it) { return it.x; }, cy: function(it) { return it.y; }, r: function(it) { return Math.sqrt(it.value); } });
You can use these generated attributes in your data to determine how to render:
x
: x coordinatey
: y coordinatelv
: depth of node in treemapPolygon is a point array. For example, a triangle:
[{x: 0, y: 0}, {x: 100, y: 100}, {x: 200, y: 0}]
Use Voronoi.Polygon.create to quickly generate a N side regular polygon:
var clipPolygon = Voronoi.Polygon.create(width, height, N);
and use it in Voronoi treemap to indicate the clipping region of the whole treemap:
var voronoi = new Voronoi.Treemap(data, clipPolygon, width, height);
This library is implemented base on this publication:
Arlind Nocaj and Ulrik Brandes, "Computing Voronoi TreemapsFaster, Simpler, and Resolution-independent", Eurographics Conference on Visualization (EuroVis) 2012
Kirby T. Wu ( follow on twitter )
voronoi.js is released under MIT License.