Introduction To D3.js
What is D3?
What can I do with D3 that I cannot do using other libraries?
D3 has a list of layouts that you can use to create your visualizations. Think of each layout as a function that takes data and modifies it in a way so as to create that layout. For example, consider the TreeMap layout, it'd take an object in the hierarchical format and append keys like 'x', 'y', 'dx' and 'dy' to it. Using these keys you can position elements on the page and give them dimensions so as to view the data that you have sent in the first place in the form of a TreeMap. Another interesting example of visualization is creating a geographical map. D3 has the d3.geo API which takes actual coordinates of regions/countries and plots them using different layouts. You can have flat (Mercator) maps as well as spherical (Orthographic) maps and many more in between. Unlike other libraries, D3 (in most cases) doesn't create the HTML or UI for you. It does the difficult part that is of the calculations and leaves appending DOM elements to you. The main advantage of this is the flexibility of choosing which HTML/SVG elements. For example in the TreeMap example above, you have the flexibility of using divs or svg elements for rendering the TreeMap.
Advantages of D3
Flexibility is one of the biggest advantages of D3. The fact that it does most of the calculation and lets you handle what and what not to append to the DOM can be very powerful. You'll not have to bother finding a way to show multiple axes, to hide ticks when you don't want them, and the like. The choice of selecting the type(like svg over div) of elements to use is another big advantage. The large span of functionality that D3 provides viz. time, scales, layouts, geography, geometry, interactions, transitions, SVG, and other helper functions to do number crunching on your data is also impressive.
Limitations of D3
D3 provides a huge span of functionality in the visualization sector. With cons which exist only if one lets them come. In my opinion it is a tool that all UI developers should carry under their belt.