4 ms·
I swear many people would be better off just manually generating paths on their own. It's not difficult. D3 is pretty awesome and all but it is NOT a charting
by forrestthewoods 11y ago
I swear many people would be better off just manually generating paths on their own. It's not difficult.
D3 is pretty awesome and all but it is NOT a charting library. It's a data binding framework. It adds several layers of incredibly hard to follow abstraction.
It's super duper cool when it does exactly what you want and all you desire is to drop your in your data. A+++ would recommend. But if you want to do something slightly different it's a huge pain in the ass. At the end of the day it's just a handful of SVG primitives. Draw them yourself and move on with your day. I promise you it's easier.
- jwr 11y agoI wondered if I was the only one who thought that way — apparently not. I also found D3 to be very inflexible, with abstractions doing strange things behind your back. In general, a lot of "magic" was happening behind the scenes. I mostly write in ClojureScript, so the data binding wasn't that attractive — I can do all of that work better anyway. I guess what I'm looking for is a library with graphics/charting primitives written in ClojureScript, possibly using React. Hmm.
- krebby 11y agoThe next version of D3 will be modular, with the different parts broken out into separate packages (i.e. shape utils separate from databinding utils). Currently I'm using D3 piecemeal with React with a good deal of success.
- SonicSoul 11y agoCan you elaborate on "manually generating paths"?
- forrestthewoods 11y agoThe end result is an <svg> element with a bunch of with a bunch of <path> <line> <rect> children. Sometimes you can wrangle D3 to generate the <path>s you want. Sometimes it's easier to more directly make them yourself.
- ZoeZoeBee 11y agoYou can use SVG to draw a line between points, and set the interpolation
- timruffles 11y agoWha? Yes, D3 is definitely not a charting library - because it's a data-focused, thin wrapper over the DOM & SVG APIs. It's designed from the group up to "let you do something slightly different": that's the point. It's the low-level primitives you'd otherwise reinvent. Your experience is totally different from everyone on every team I've used D3 with, and all the people I've taught D3. I can understand "D3 does too little", but "D3 does too much" is just weird.
- catpolice 11y agoHmm, here's my experience: What I've needed from D3 is the math-y bits: calculating layouts, paths, etc. What I don't need (or want) is for it to ever touch the DOM. But that's what it wants to do most. D3 is sort of the best of the jQuery-inspired "select and mutate" generation - it does data binding in a way that really makes sense as long as you let it handle DOM operations. But following React, there's been a pretty big movement away from procedural DOM manipulation and toward the declarative re-rendery "DOM as a pure function of state" approach. In that case, letting D3 mess with the DOM (especially in the way that it does, where complex links between DOM and data are maintained in the background) is bad news. If you already have a way of getting elements in and out of the DOM and keeping their state aligned with the data that you like better than the select-and-mutate model, a lot of what D3 does seems unnecessary or introduces problematic interference. React and D3, for instance, tend to not play very nice without a lot of effort. I've had projects where programmers lean on D3 because that's the way they've learned to get SVG elements into the DOM - they'll take an example they've found somewhere that mostly only uses simple shapes, modify it a little bit to do what they want and ask me for help adding that visualization into another project. Sometimes in these cases, D3 isn't getting used for much except for "insert an svg element with these attributes for every node in this data structure", in which case it's total overkill, and I end up stripping it out entirely. I sometimes end up keeping it around for things (I'm probably not going to write my own Reingold-Tilford tree layout algorithm), but often in these cases I have to do extra work to keep it from conflicting with other things.
- purpleparakeet 11y agoFYI, D3 4.0 is just around the corner and breaks the library into different components so you can just import the ones you need.
- mizzao 11y agoI've had the complete opposite experience with D3. It adds one layer of abstraction (data binding) that is a little hard to understand, but pays off reams once you "get" it. It doesn't do anything if you just desire to drop in your data - you need to build everything from scratch. On the other hand, if you start with good code or a good example and want to do something slightly different, it's very easy to modify to do what you want. The amount of code it would take to "do everything yourself" that D3 does would be an order of magnitude more.
- yashap 11y agoDisagree. Like any framework or medium-to-big library, D3 does take some time to learn, but totally pays off once you learn it. If you're just doing a single viz, then sure, rolling your own is ok. But if you're doing lots, and especially if they need to be interactive, I'd strongly advise against reinventing the wheel. I also have not found it too hard to step outside of/modify the online examples, though I guess it depends on the particular viz you're trying to create.