An example of how to animate a d3-cloud word cloud.
Based on https://github.com/jasondavies/d3-cloud/blob/master/examples/simple.html.
An example of how to animate a d3-cloud word cloud.
Based on https://github.com/jasondavies/d3-cloud/blob/master/examples/simple.html.
| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <body> | |
| <script src="http://d3js.org/d3.v3.min.js"></script> | |
| <script src="https://rawgit.com/jasondavies/d3-cloud/master/build/d3.layout.cloud.js"></script> | |
| <script> | |
| //Simple animated example of d3-cloud - https://github.com/jasondavies/d3-cloud | |
| //Based on https://github.com/jasondavies/d3-cloud/blob/master/examples/simple.html | |
| // Encapsulate the word cloud functionality | |
| function wordCloud(selector) { | |
| var fill = d3.scale.category20(); | |
| //Construct the word cloud's SVG element | |
| var svg = d3.select(selector).append("svg") | |
| .attr("width", 500) | |
| .attr("height", 500) | |
| .append("g") | |
| .attr("transform", "translate(250,250)"); | |
| //Draw the word cloud | |
| function draw(words) { | |
| var cloud = svg.selectAll("g text") | |
| .data(words, function(d) { return d.text; }) | |
| //Entering words | |
| cloud.enter() | |
| .append("text") | |
| .style("font-family", "Impact") | |
| .style("fill", function(d, i) { return fill(i); }) | |
| .attr("text-anchor", "middle") | |
| .attr('font-size', 1) | |
| .text(function(d) { return d.text; }); | |
| //Entering and existing words | |
| cloud | |
| .transition() | |
| .duration(600) | |
| .style("font-size", function(d) { return d.size + "px"; }) | |
| .attr("transform", function(d) { | |
| return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")"; | |
| }) | |
| .style("fill-opacity", 1); | |
| //Exiting words | |
| cloud.exit() | |
| .transition() | |
| .duration(200) | |
| .style('fill-opacity', 1e-6) | |
| .attr('font-size', 1) | |
| .remove(); | |
| } | |
| //Use the module pattern to encapsulate the visualisation code. We'll | |
| // expose only the parts that need to be public. | |
| return { | |
| //Recompute the word cloud for a new set of words. This method will | |
| // asycnhronously call draw when the layout has been computed. | |
| //The outside world will need to call this function, so make it part | |
| // of the wordCloud return value. | |
| update: function(words) { | |
| d3.layout.cloud().size([500, 500]) | |
| .words(words) | |
| .padding(5) | |
| .rotate(function() { return ~~(Math.random() * 2) * 90; }) | |
| .font("Impact") | |
| .fontSize(function(d) { return d.size; }) | |
| .on("end", draw) | |
| .start(); | |
| } | |
| } | |
| } | |
| //Some sample data - http://en.wikiquote.org/wiki/Opening_lines | |
| var words = [ | |
| "You don't know about me without you have read a book called The Adventures of Tom Sawyer but that ain't no matter.", | |
| "The boy with fair hair lowered himself down the last few feet of rock and began to pick his way toward the lagoon.", | |
| "When Mr. Bilbo Baggins of Bag End announced that he would shortly be celebrating his eleventy-first birthday with a party of special magnificence, there was much talk and excitement in Hobbiton.", | |
| "It was inevitable: the scent of bitter almonds always reminded him of the fate of unrequited love." | |
| ] | |
| //Prepare one of the sample sentences by removing punctuation, | |
| // creating an array of words and computing a random size attribute. | |
| function getWords(i) { | |
| return words[i] | |
| .replace(/[!\.,:;\?]/g, '') | |
| .split(' ') | |
| .map(function(d) { | |
| return {text: d, size: 10 + Math.random() * 60}; | |
| }) | |
| } | |
| //This method tells the word cloud to redraw with a new set of words. | |
| //In reality the new words would probably come from a server request, | |
| // user input or some other source. | |
| function showNewWords(vis, i) { | |
| i = i || 0; | |
| vis.update(getWords(i ++ % words.length)) | |
| setTimeout(function() { showNewWords(vis, i + 1)}, 2000) | |
| } | |
| //Create a new instance of the word cloud visualisation. | |
| var myWordCloud = wordCloud('body'); | |
| //Start cycling through the demo data | |
| showNewWords(myWordCloud); | |
| </script> |
how would you center all this?