Hi! I'm Nicolas and I'm interested in information visualization, JavaScript and web standards.
I currently work as a Data Visualization Scientist at Twitter. I wrote PhiloGL, the JavaScript InfoVis Toolkit and V8-GL.
I've been putting a lot of effort in the upcoming version of the JavaScript InfoVis Toolkit lately, and I though it would be a good idea to show some of the new features I came up with.
The new version isn't finished yet, but I've come pretty far and wanted to make a sort of checkpoint for the things I've done, the things I'll be doing and the things I'm thinking about doing.
So what have I been working on?
A new project page design.
A complete documentation. I made an API documentation that is also mixed with some narrative documentation for each Class, so you can learn how the visualizations are implemented and how to use them.
Packaging All visualizations will be packaged in the same file, and you'll be able to make your own build based on what you're going to use (Treemaps, Hypertrees, RGraphs, Spacetrees or any combination of those). This is a cool aspect of making modular code.
The other good thing about modular code is that the size of the full package will drop in ~30% compared to version 1.0.8a
Examples I've been coding some new visualization examples that will be packaged with the library. Some of them are very similar to the ones found in 1.0.8a, but adapted for version 1.1. Other examples show some of the new features of the library, and others try to expose some features of version 1.0.8a that were not properly documented.
Library features
I've been building this library with four things in mind:
Extensibility The library has multiple access points where it can be extended in different ways. For example, all main Classes are mutable objects, so you can extend or implement any method of any class in-place, like for example re-implement the nodes coloring method in the Squarified treemap:
//TM.Strip, TM.SliceAndDice also work TM.Squarified.implement({'setColor':function(json){returnjson.data.$color;}});
...or adding new node/edge plotting methods in the Hypertree, ST or RGraph:
Customization The library provides many ways for customizing the visualizations. There are controller methods that determine the behavior of the visualization, and configuration parameters like node and edge types, color and dimensions. Node shapes can be square, rectangle, circle, ellipse, etc. and edge shapes: line, hyperline and arrow. I also added transition effects like Quart, Bounce, Elastic, Back, etc. for the animations.
Modularity As explained above, the code has been divided into modules, providing a way for making custom builds of the library. Modularity also takes care of namespacing: I only add Classes that are meant to be accessed by the user and I don't pollute the window object with unnecessary global objects.
Composition A major improvement in this version is that all visualizations can co-exist in the same namespace. That means that multiple instances of different visualizations can be used and composed to make new visualizations. I haven't explored this feature of the library yet, but this would mean that for example I can make a Treemap that has Hypertrees rendered as leaves, or a Spacetree that has Treemaps as nodes, or... well, any other combination of things.
Examples
As you might know, I don't have the most suited computer for making screencasts, so sorry if you see some performance problems.
This is a short video I made of a RGraph example.
The main idea behind this example is Customization.
That can be seen for example in the different node types, edge types and colors used, as well as in the Elastic transition effect for the animation.
This is just an example to expose as much features as I can in one visualization, so don't take this as a "useful" visualization example please.
Here is another short video: it illustrates how Graph Operations can be made with the Hypertree visualization.
You'll see 4 consecutive operations:
Removing a subtree The bottom right subtree will be removed with an animation.
Removing edges Edges from the top left subtree will be removed with an animation.
Adding a graph A graph will be added with an animation
Morphing The graph will transform into another graph -with an animation