How to create a cloud chart?

I saw these diagrams called tag clouds, task clouds, and cloud graphics, but can anyone recommend a library or utility for pure JavaScript (without Flash) that can be used to create cloud diagrams? Many thanks.

+4
source share
8 answers

For library-independent JavaScript validation:

  • tagCloud : JavaScript TagCloud Generator

I downloaded 2 demos:

+5
source

You can easily do this with CMS and css

<div class=".cloud"> <a href="#" class="weight-1">Cloud</a> <a href="#" class="weight-2">Cloud</a> </div> 

CSS

 .cloud .weight-1 { font-size: 10px; } .cloud .weight-2 { font-size: 15px; } 

Your CMS will create weight and apply the appropriate style.

+2
source

I would have looked at timecloud. Uses jQuery, here is the github page:

http://github.com/stef/timecloud

Another good one that uses jQuery, DynaCloud:

http://johannburkard.de/blog/programming/javascript/dynacloud-a-dynamic-javascript-tag-keyword-cloud-with-jquery.html

+2
source

It is also worth taking a look at these examples based on D3:

+2
source

Quote “Show your skillset with the interactive colorful D3.js tag cloud” , here is a working example of how to create such a cloud. It is based on the Jason Davis cloud computing layout script (in turn inspired by Wordle ), which is used to manage D3.js for drawing a cloud.

enter image description here

You can see the working sample built in below as well as in jsfiddle .

The entire example can be found on GitHub at: https://github.com/bbottema/d3-tag-skills-cloud


First, define the cloud data using the text and size properties:

 var skillsToDraw = [ { text: 'javascript', size: 80 }, { text: 'D3.js', size: 30 }, { text: 'coffeescript', size: 50 }, { text: 'shaving sheep', size: 50 }, { text: 'AngularJS', size: 60 }, { text: 'Ruby', size: 60 }, { text: 'ECMAScript', size: 30 }, { text: 'Actionscript', size: 20 }, { text: 'Linux', size: 40 }, { text: 'C++', size: 40 }, { text: 'C#', size: 50 }, { text: 'JAVA', size: 76 } ]; 

Next, you need to use a script layout to calculate the placement, rotation and size of each word:

 d3.layout.cloud() .size([width, height]) .words(skillsToDraw) .rotate(function() { return ~~(Math.random() * 2) * 90; }) .font("Impact") .fontSize(function(d) { return d.size; }) .on("end", drawSkillCloud) .start(); 

Finally, we implement drawSkillCloud , which executes the D3 drawing:

 // apply D3.js drawing API function drawSkillCloud(words) { d3.select("#cloud").append("svg") .attr("width", width) .attr("height", height) .append("g") .attr("transform", "translate(" + ~~(width / 2) + "," + ~~(height / 2) + ")") .selectAll("text") .data(words) .enter().append("text") .style("font-size", function(d) { return d.size + "px"; }) .style("-webkit-touch-callout", "none") .style("-webkit-user-select", "none") .style("-khtml-user-select", "none") .style("-moz-user-select", "none") .style("-ms-user-select", "none") .style("user-select", "none") .style("cursor", "default") .style("font-family", "Impact") .style("fill", function(d, i) { return fill(i); }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [dx, dy] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { return d.text; }); } 

This is the main thing. You can influence the size and which angles are used to select random spins, as well as some additions between words, if you want, and the fill color, but these are the basics!

Look at the work in the snippet (or jsfiddle ):

 // First define your cloud data, using `text` and `size` properties: var skillsToDraw = [ { text: 'javascript', size: 40 }, { text: 'D3.js', size: 15 }, { text: 'coffeescript', size: 25 }, { text: 'shaving sheep', size: 25 }, { text: 'AngularJS', size: 30 }, { text: 'Ruby', size: 30 }, { text: 'ECMAScript', size: 15 }, { text: 'Actionscript', size: 10 }, { text: 'Linux', size: 20 }, { text: 'C++', size: 20 }, { text: 'C#', size: 25 }, { text: 'JAVA', size: 38 }, // just copy data and reduce size, else the cloud is a little boring { text: 'javascript', size: 40 }, { text: 'D3.js', size: 15 }, { text: 'coffeescript', size: 25 }, { text: 'shaving sheep', size: 25 }, { text: 'AngularJS', size: 30 }, { text: 'Ruby', size: 30 }, { text: 'ECMAScript', size: 15 }, { text: 'Actionscript', size: 10 }, { text: 'Linux', size: 20 }, { text: 'C++', size: 20 }, { text: 'C#', size: 25 }, { text: 'JAVA', size: 38 }, { text: 'javascript', size: 40 }, { text: 'D3.js', size: 15 }, { text: 'coffeescript', size: 25 }, { text: 'shaving sheep', size: 25 }, { text: 'AngularJS', size: 30 }, { text: 'Ruby', size: 30 }, { text: 'ECMAScript', size: 15 }, { text: 'Actionscript', size: 10 }, { text: 'Linux', size: 20 }, { text: 'C++', size: 20 }, { text: 'C#', size: 25 }, { text: 'JAVA', size: 38 } ]; // Next you need to use the layout script to calculate the placement, rotation and size of each word: var width = 500; var height = 500; var fill = d3.scale.category20(); d3.layout.cloud() .size([width, height]) .words(skillsToDraw) .rotate(function() { return ~~(Math.random() * 2) * 90; }) .font("Impact") .fontSize(function(d) { return d.size; }) .on("end", drawSkillCloud) .start(); // Finally implement `drawSkillCloud`, which performs the D3 drawing: // apply D3.js drawing API function drawSkillCloud(words) { d3.select("#cloud").append("svg") .attr("width", width) .attr("height", height) .append("g") .attr("transform", "translate(" + ~~(width / 2) + "," + ~~(height / 2) + ")") .selectAll("text") .data(words) .enter().append("text") .style("font-size", function(d) { return d.size + "px"; }) .style("-webkit-touch-callout", "none") .style("-webkit-user-select", "none") .style("-khtml-user-select", "none") .style("-moz-user-select", "none") .style("-ms-user-select", "none") .style("user-select", "none") .style("cursor", "default") .style("font-family", "Impact") .style("fill", function(d, i) { return fill(i); }) .attr("text-anchor", "middle") .attr("transform", function(d) { return "translate(" + [dx, dy] + ")rotate(" + d.rotate + ")"; }) .text(function(d) { return d.text; }); } // optional: set the viewbox to content bounding box (zooming in on the content, effectively trimming whitespace) var svg = document.getElementsByTagName("svg")[0]; var bbox = svg.getBBox(); var viewBox = [bbox.x, bbox.y, bbox.width, bbox.height].join(" "); svg.setAttribute("viewBox", viewBox); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script> <script src="https://cdn.rawgit.com/jasondavies/d3-cloud/v1.2.1/build/d3.layout.cloud.js"></script> <div id="cloud"></div> 

You can read a more detailed introduction, followed by a more advanced approach to “Show your skillset with an interactive colorful D3.js tag cloud” . Get a sample project at https://github.com/bbottema/d3-tag-skills-cloud .

+2
source

For this i2ui task:

  <div data-i2="css:[{fontSize:'8px',color:'#888888'},{fontSize:'30px',color:'#000000'}]"> <span data-i2="rate:1">Alaska</span> <span data-i2="rate:4">Arizona</span> <span data-i2="rate:7">Arkansas</span> <span data-i2="rate:12">California</span> <span data-i2="rate:5">Colorado</span> <span data-i2="rate:8">Connecticut</span> <span data-i2="rate:3">Delaware</span> <span data-i2="rate:6">Florida</span> </div> 

JavaScript call after loading HTML:

 i2.emph(); 

See the demo: http://jsfiddle.net/7GcKT/4/

+1
source

So far, one @CMS recommendation works for me, but there are two more FYIs that I just looked at but have not tested.

0
source

I recently found this jQuery library: http://addywaddy.imtqy.com/jquery.tagcloud.js/

0
source

All Articles