Description
Technical notes re #2221 (comment)
On multidimensional explorers: made a separate issue as this topic is deep and the topic of "New charts" will likely be quite broad.
We've been planning multidimensional extensions eg. SPLOM. The above directions also make a lot of sense, and as usual there's always the tradeoff among implementation time (ultimately $), payload size and functionality. A nice option would be a kind of unification of plots, eg. parcoords
and sankey
, both of which are relatively compact as they do one thing without much configuration. Another option is a new plot type, or a new trace type eg. on the substrate of parcoords
.
Here's a quick note on the expected challenges of integrating the new thing with either:
parcoords
had been written for the express purpose of performance, so it uses WebGL for rendering. It usesGL.LINES
as that's the most compact geometry ie. fastest to do the interactions with (there were response time criteria). To make lines thicker, we'd need to convert to GL.TRIANGLES or similar, ie. 2-3x work in the vertex shader (which also does GPU crossfiltering). WebGL does have alineWidth
method but the standard permits that implementations cap line width to 1px, which browsers increasingly opted for over time... If Sankey-like splines are also needed, that's another layer of performance hit and implementational complexity. Yet it'd be possible to add an SVG or polygonal WebGL trace type for those cases where data points are not in the multiple 10k range and more diverse geometry eg. thicker lines are needed.parcoords
is already multilayer, the axes are in SVG and there could be more SVG layers.sankey
is an alternative target. After all, it internally works as a layered graph, ie. the internal representation is already close to the axis cadence of parallel coordinates and their ilk. But our implementation uses the heuristic as it is ind3-sankey
(we only added support for multiedges via a PR), and it's free to arrange the edges, resulting in the observed line discontinuity that's definitely not in the style of parallel coordinates. This freedom yields a more optimal arrangement in the case of general Sankey work, ie. minimizing the line crossings, not a concern for parcoords-like work. We'd need to somehow add configuration for bypassing the heuristic or the entired3-sankey
in favor of a parcoords-like continuous line layout.
There's the option that these two, and the new functionality, be unified, which is doable but sounds like even more work. Also, the chart design space is enormously large and the way plotly.js
is set up, for better or worse, it's geared more for specific, configurable chart types rather than a Grammar of Graphics like, fluid or low level way of building up toward a desired chart type. The reason it comes up is that there are a lot of possibly useful additions and improvements that can be made to the charts we speak of. The implementationally easiest thing on the other hand is a completely new chart type but that probably adds the largest JS payload (not sure if it's a concern, @alexcjohnson or @etpinard could tell). Btw. there's a parallel sets implementation that interacts not unlike our parcoords
and sankey
with drag&drop: https://www.jasondavies.com/parallel-sets/ which shows line continuity but not sure if it supports multiedges.