I am trying to create a wordcloud with a D3 layout with horizontal layout.
Instead of limiting the width, I limit the height.
The package layout automatically distributes circles with a large one in the center and surrounding. If height is limited, instead of horizontally spacing the circles, it reduces the size of each circle.
How can I stop the layout from resizing circles and start adding them to the sides if there is no more space around the larger one.
I want something like this: http://imgur.com/7MDnKHF
But I just achieved this: http://jsfiddle.net/v9xjra6c/
This is my current code:
var width, height, diameter, padding, format, pack, svg, node; var initSizes = function() { var dimensions = { width: 900, height: 288 }; width = dimensions.width; height = dimensions.height; diameter = Math.min(width, height); padding = 12; format = d3.format(',d'); }; var initLayout = function() { pack = d3.layout.pack() .sort(null) .size([width, height]) .padding(padding); }; var createSVG = function() { svg = d3.select('.chart-container').append('svg') .attr('width', width) .attr('height', height) .attr('class', 'bubble'); }; var createBubbles = function() { var dataset = pack.nodes(DATA); node = svg.selectAll('.node') .data(dataset.filter(function(d) { return !d.children; })) .enter().append('g') .attr('class', 'node') .attr('transform', function(d) { return 'translate(' + dx + ',' + dy + ')'; }); node.append('title') .text(function(d) { return d.name + ': ' + format(d.value); }); node.append('circle') .attr('r', function(d) { return dr; }); node.append('text') .attr('dy', '.3em') .style('text-anchor', 'middle') .text(function(d) { return d.name.substring(0, dr / 3); }); }; initSizes(); initLayout(); createSVG(); createBubbles();
Thanks!
source share