Marco, that's a great question. Comparing reference data to a large
dataset is a very compelling way to use the chart. Even in the
nutrient example, I've often wanted to compare two foods directly: Big
Mac vs Whopper, Apple vs Orange, etc.
You might get some implementation clues from this example as well,
which shows a green line that is the average of the selected data:
https://appstorerankings.net/visualizing-the-ios-app-store
I am going to brain dump now. I ended up writing many blocks of text,
so I added section titles.
Visual Database Reference Application
============================
http://bl.ocks.org/3150059
I think of this example as a reference application for a visual
database. What you want is to create and compare arbitrary queries.
Usually, you color-code different views. Maybe calculate new columns
from existing columns. Reduce rows of data by averaging/summing and
display the derived dataset. Text search. CSV import/export.
It should be easy to generate a new view and layer it on the
visualization in just a couple lines of code with d3.parcoords.js. You
could apply any filter function on any dataset, and plot it along with
everything else. Right now it wipes out the old view. The brushing is
still too woven into the component.
I would love more perspectives on the interaction design of this
application as well. What are the features databases have that would
be useful? How can the application be more intuitive? How can it be
extended or refined, such as adding new visualizations, for a
particular dataset or domain?
Ordinal Axes
=========
These should be in the component soon, with brushing. Chris Rich and
Patrick Martin both great examples, so there's no excuse for it to not
be in there yet. I was thinking about working on it, but I brain
dumped instead
For now, check out these examples of ordinal axes:
http://dexvis.wordpress.com/2013/01/28/d3js-parallel-lines-and-football/
http://bl.ocks.org/chrisbrich/4173826
Hypersolid: 4-Dimensional Geometry
==========================
Recently, I'm using parallel coordinates to look at 4-D objects,
polychora. I'm learning about the mappings of lines and surfaces in
parallel coordinates. I have lines working well. Edges of the 4-D
shapes are each represented by 3 points: where the two vertices
intersect between each axis. The intersection point corresponds to the
line (going to infinity). See the "construction" examples as a
starting place, they render the vertices as well.
http://fleetinbeing.net/hypersolid/examples/ - URLs not stable
https://github.com/the-only-milosz/hypersolid
These are all in the examples directory of hypersolid, a 4-D shape viewer.
Actually the intersection can happen outside the axes as well. Once
you start the shapes rotating, you may notice some more dualities:
lines<->points, rotations<->translations, ellipses<->hyperbolas. It's
very easy to see families of parallel lines (groups of points in a
vertical line).
The data for these shapes was collected from:
http://paulbourke.net/geometry/hyperspace/
I don't feel I can explain this all very easily right now, but I plan
to attend Alfred Inselberg's lectures on parallel coordinates in
April. I'll create better examples then of hyperdimensional geometry.
Still learning right now.
Hypersurfaces
==========
Visualizing hyperplanes and hypersurfaces is the next step. I think it
would be possible to see the results of some machine learning
algorithms, such as Support Vector Machines.
If anyone understands this paper on curved surfaces in parallel
coordinates, an interactive example would help the rest of us:
http://www.cs.usc.edu/assets/004/83248.pdf
Network Visualization
===============
With the line<->point duality, many possibilities emerge for exploring
complex spaces. An example is networks/graphs, which is what the
vertices/edges of polychora are. Most network layouts are 2 or
3-dimensional, but you could instead have a static N-dimensional
layout. For example, plot metrics like betweenness or degree as
dimensions.
I'll post an example of a real-world graph eventually, but you can
interpret the hypersolid examples this way.
WebGL 2D
========
I've forked the WebGL-2D project to try out a WebGL renderer instead
of the 2D Canvas. I didn't get around to testing performance, but it
does seem slightly faster (just rendering speed... I turned off render
queue so the interaction is chunky).
With some more optimization, I bet WebGL could be 6-12x as fast.
Rendering is still the biggest bottleneck for larger datasets, 5k+
rows.
http://bl.ocks.org/syntagmatic/raw/5023284/
https://github.com/syntagmatic/webgl-2d
The project was designed to emulate the 2D canvas API, not to be fast.
If you happen to have a fast way to render millions of lines in WebGL,
post it on bl.ocks! This is not a high priority for me in the next few
months, but it would be a nice supercharge someday.
Projective Geometry and a Deeper Understanding
===================================
If you're looking for more insight on parallel coordinates, watch this
lecture on projective geometry.
http://youtu.be/NYK0GBQVngs
There's also a whole book on parallel coordinates which covers
projective geometry, hyperplanes, applications, etc.
http://www.amazon.com/Parallel-Coordinates-Multidimensional-Geometry-Applications/dp/0387215077
Hyperbolic Projection
===============
It would be super-interesting to embed parallel coordinates in a
hyperbolic space, and view it with the poincare disk or beltrami-klein
model. Hyperbolic space has much richer parallelism than Euclidean
space. If they had d3.js in the 19th century, I'm sure geometers would
have posted examples of this on bl.ocks for us.
Norman Wildberger has a great history of Non-Euclidean geometry lecture.
http://youtu.be/zHh9q_nKrbc
He even has an entire lecture series on the topic of "Universal
Hyperbolic Geometry", if your mind is tingling and craves much more.
Use what you learn and post simple examples on bl.ocks! You can do it!
http://www.youtube.com/course?list=EC6ACFCC19EA82CA71
Towards v1.0
==========
Parallel coordinates is a rabbit hole, and it's taking me longer to
move towards version 1.0 than I expected. It's a balance between
something flexible for exploring the geometry and a data exploration
plugin.
There should be a lot of development happening in the geometry-related
areas in April, and then a more stable plugin release in May. I can't
promise v1.0 then, but there will be more features built-in, better
docs, and more examples.
Kai