Introduction
D3js chart is free, open source, and built on top of HTML5 Standard. As per the official website,  D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction.
Description 
Here we learn basic usage of D3js and then moved to different type of visualization chart.
- How Selections works
 
 Modifying documents using the W3C DOM API is tedious,
 
 For example, to change the text color of paragraph elements:
 - var paragraphs = document.getElementsByTagName("p");  
- for (var i = 0; i < paragraphs.length; i++) {  
- var paragraph = paragraphs.item(i);  
- paragraph.style.setProperty("color", "white", null);  
- }  
 
 - d3.selectAll("p").style("color", "white");  
 
 
 I have implemented a demo for selector example in jsfiddle.
 
 Here is a different way to use selector and append new element
 
 a. d3.select(selector)
 
 Select first element which matches to selector and selector varies to tag,class,id etc. If no elements in the current document match the specified selector, it returns the empty selection.This function traverses the DOM in top to bottom order.
 
 b. d3.select(node):
 
 Select specified node.This is useful if you already have a reference to a node, such as d3.select(this) within an event listener.This function does not traverse the DOM.
 
 c. d3.selectAll(selector):
 
 Select all elements which match to selector. If no elements in the current document match the specified selector, returns the empty selection.This function traverse the DOM top to bottom order.
 
 e.g.
 - d3.selectAll("P");   
- d3.selectAll(".someclass>p");  
 
 
 Select specified elements of array. This is useful if you already have a reference to a node, such as d3.selectAll(this.childNodes) within an event listener. This function does not traverse the DOM.
 
 Selection also works with chaining method, this applied multiple operations to same elements. Let's see example.
 
 e.g. Here first we have select all p tag and then set text color and background color.
 - d3.selectAll("p"  
- .style("color","blue")   
- .style("background-color","yellow");  
 
 
 
- Dynamic Properties
 
 D3 provides many built-in reusable functions and function factories, such as graphical primitives for area, line and pie charts.
 
 For example, to randomly color paragraphs:
 - d3.selectAll("p").style("color", function() {  
- return "hsl(" + Math.random() * 360 + ",100%,50%)";  
- });   
-   
- To alternate shades of gray for even and odd nodes:   
-   
- d3.selectAll("p").style("color", function(d, i) {  
- return i % 2 ? "#fff" : "#eee";  
- });  
 
 
 With the default join-by-index, the first element in the data array is passed to the first node in the selection, the second element to the second node, and so on.
 
 For example, if you bind an array of numbers to paragraph elements, you can use these numbers to compute dynamic font sizes:
 - d3.selectAll("p")  
- .data([4, 8, 15, 16, 23, 42])  
- .style("font-size", function(d) { return d + "px"; });  
 
 
 
- Enter, Update and Exit 
 
 Using D3’s enter and exit selections, you can create new nodes for incoming data and remove outgoing nodes that are no longer needed.
 
 When data is bound to a selection, each element in the data array is paired with the corresponding node in the selection. If there are fewer nodes than data, the extra data elements form the enter selection, which you can instantiate by appending to the enter selection.
 
 For example:
 - d3.select("body").selectAll("p")  
- .data([4, 8, 15, 16, 23, 42])  
- .enter().append("p")  
- .text(function(d) { return "I’m number " + d + "!"; });  
 
 
 A common pattern is to break the initial selection into three parts: the updating nodes to modify, the entering nodes to add, and the exiting nodes to remove.
 -   
- var p = d3.select("body").selectAll("p")  
- .data([4, 8, 15, 16, 23, 42])  
- .text(function(d) { return d; });  
-   
- p.enter().append("p")  
- .text(function(d) { return d; });  
-   
- p.exit().remove();  
 
 
 For example, with a bar chart you might initialize entering bars using the old scale, and then transition entering bars to the new scale along with the updating and exiting bars.
 
 D3 lets you transform documents based on data; this includes both creating and destroying elements. D3 allows you to change an existing document in response to user interaction, animation over time, or even asynchronous notification from a third-party.
 
 A hybrid approach is even possible, where the document is initially rendered on the server, and updated on the client via D3.
 
 You can learn more from this  article.
 
 
- Transformation, not Representation
 
 D3 does not introduce a new visual representation. Unlike Processing, Raphaël, or Protovis, D3’s vocabulary of graphical marks comes directly from web standards: HTML, SVG, and CSS. For example, you can create SVG elements using D3 and style them with external stylesheets.
 
 You can use composite filter effects, dashed strokes and clipping. If browser vendors introduce new features tomorrow, you’ll be able to use them immediately—no toolkit update required.
 
 And, if you decide in the future to use a toolkit other than D3, you can take your knowledge of standards with you!
 
 Best of all, D3 is easy to debug using the browser’s built-in element inspector: the nodes that you manipulate with D3 are exactly those that the browser understands natively.
 
 
- Transitions
 
 D3’s focus on transformation extends naturally to animated transitions. Transitions gradually interpolate styles and attributes over time. Tweening can be controlled via easing functions such as “elastic”, “cubic-in-out” and “linear”.
 
 D3’s interpolators support both primitives, such as numbers and numbers embedded within strings (font sizes, path data, etc.), and compound values. You can even extend D3’s interpolator registry to support complex properties and data structures.
 
 For example, to fade the background of the page to black:
 - d3.select("body").transition()  
- .style("background-color", "black");  
 
 - d3.selectAll("circle").transition()  
- .duration(750)  
- .delay(function(d, i) { return i * 10; })  
- .attr("r", function(d) { return Math.sqrt(d * scale); });  
 
 
 Reference link:  https://github.com/mbostock/d3/wiki
Conclusion 
In this article we have learned basic concepts of D3 charting and feature. In next series of article we learn real chart examples with customization.
Read more articles on Open Source Technologies: