Most graphing libraries provide out-of-the-box graphs. Once you provide the data and some configuration flags, the library assembles axes, tick marks, and a legend. It’s easy to get started, but the possibilities quickly taper off. If you want to modify the graph in ways the library’s authors didn’t expect, there may not be much you can do. Not so with D3.
D3 is one of the most well-abstracted libraries I’ve ever used. Its pre-packaged tools compose nicely with each other and don’t assume so much they that limit your possibilities. In addition to tools for drawing shapes, D3 provides methods for handling events and animations. In fact, it’s been used not only for interactive data visualizations, but for particle simulations and games.
If you want the flexibility of pencil and paper — and the responsibility for drawing every jot and tittle that goes along with it — D3 is for you. Once you learn its core abstractions, you can draw virtually anything.