syntagmatic / parallel-coordinates

A d3-based parallel coordinates plot in canvas. This library is no longer actively developed.
http://syntagmatic.github.com/parallel-coordinates/
Other
511 stars 212 forks source link

Future of d3.parcoords: Version 4 Modules #326

Closed syntagmatic closed 7 years ago

syntagmatic commented 7 years ago

If you've been following the development of D3 Version 4, you'll know that new plugins need to be broken into modules.

This is a good opportunity to do a full re-write by extracting out functionality from d3.parcoords into smaller, separate modules. An example is the autoscale functionality. This feature could be used with other chart types like scatterplots, punchcards and tables. It should also have a fairly extensive suite of tests, because it can behave strangely on unexpected data.

It's not obvious to me how different rendering/interaction modes should be handled. Ideally we would find a "sweet spot" of around 3-6 core modules that the new parcoords examples will depend on. Too few and the modules will get too complex. Too many and the functionality and documentation become too scattered.

The latest examples of the core pattern for D3 Version 3 parallel coordinates are Exoplanets and Nutrient Parallel Coordinates III.

Recently I've been studying the module pattern in d3-hexbin and d3-sankey. I haven't been too diligent about semantic versioning and publishing of d3.parcoords.js. The new modules should adhere to the emerging practices that other d3 v4 modules follow.

The next update you should expect to see from me is Nutrient Parallel Coordinates IV, which will be a Version 4 parallel coordinates example without any module patterns, hopefully within the next month or so.

@bbroeksema @timelyportfolio @julianheinrich @dehli @jmgelman @mcwillso

ghost commented 7 years ago

@syntagmatic would be happy to help with this. let me know if you need anything. thanks!

julianheinrich commented 7 years ago

I would really welcome a rewrite and will try to get some time again to contribute. Would love to have a renderer-agnostic API so that we can finally render on canvas (with optional WebGL support) or SVG (or even a mix?).

Another point to think about would be to factor out the underlying math (point-line duality, curve-curve duality, envelopes, indexed points, ...) into a separate, smaller, geometry library and build d3.parcoords.js on top of it.

syntagmatic commented 7 years ago

Excellent point @julianheinrich. A good inspiration is the @redblobgames hexagonal grid tutorial and implementation guide. The closest resource I could find on the web are these lecture notes by Alfred Inselberg. His book has many more examples.

jlazar commented 7 years ago

For a quick conversion to D3 v4 check out this repo: https://github.com/mlarosa2/parcoords

syntagmatic commented 7 years ago

Post v4 examples here if you make one! https://github.com/syntagmatic/parallel-coordinates/issues/337

BigFatDog commented 7 years ago

I'm working on this now. My ParCoord V4 module is released as UMD, ES6 mjs and a standalone js file (only essential d3 code are bundled): UMD: import ParCoord from 'parallel-coordinates'; let chart = ParCoord({config....})(this._canvasId) standalone js: <script src="./parcoord.standalone.js" type="text/javascript"></script> var chart = ParCoord({config....})(...)

I'm using rollup to bundle library. Currently, major functions have been ported with some bugs unsolved. (multibrush, breaking down to smaller ES6 modules, etc.)

What's the best way for me to contribute? Following carefully the workflow to make a feature branch?

syntagmatic commented 7 years ago

See #337 for latest discussion.

If you have a d3 v4 workflow or parcoords library, feel free to post it in #337 as well.