Hacker News new | ask | show | jobs
by tomxor 3022 days ago
Javascript graphing libraries are a pain in the arse, whenever graphing comes up at work we all cringe at the prospect of having yet another go at picking a library out of the millions that is: not painfully slow, not terribly written and not poorly designed even though they are all written on top of D3. I've also submitted PRs so some that I will not name in an attempt to optimise them semi successfully, but you start to realise that none of these were designed with performance in mind, most are just arbitrary collections of declarative D3 bundled together into predefined graphs and some user configuration passed through.

But to be a little more fair, I think a big part of the problem is that graphing is such a subjective problem to solve, that's why there are a million libraries - because there is no correct way to do it, and so it's all spread so thin.

... with some exceptions, for what I do, that's scientific graphing, if you want this you will find that all but two libraries are just not fit for purpose. What you will want is matplotlib - but that is python. The closest thing i've found in JavaScript is Plotly, and frankly, even from a non scientific graphing perspective I'd still choose this library, it's quite fast (for something object/D3 based) and is simultaneously comprehensive and customisable, to put a cherry on top it can also use it's JSON schema to define all aspects of a graph. - but it's not new and trendy, so it's not on the list.

3 comments

I think GP was referring more to graphs as the abstract mathematical concept, rather than graphical plots.

https://en.wikipedia.org/wiki/Graph_(discrete_mathematics)

my mistake, he said "graph libraries" and a graphing library is in the article's short list.
Would you recommend Plotly for real-time charts that update visually around 60fps? At work we wrote wrote ours in pure D3, but it was as pain in the ass
It's hard to do anything DOM based at 60FPS and a moderate number of points, if that is the main crux of your problem then I think you picked the correct route (custom D3). Still I find it's hard not to rinse peoples CPU in the browser when doing this.

Alternatively if you have nore than 10K points it's probably time to abandon DOM based methods and just redraw everything every frame directly (canvas / webgl).

Plotly and Victory Charts by Formidable?
I was referring to graphs in the mathematical sense, not visualizing data. Sorry for the confusion.