- Canvas-based, rendered in IE using ExplorerCanvas that in turns relies on VML
- SVG on standard-based browsers, rendered as VML in IE
There are pros and cons of both approaches but for a charting library I would recommend the later because it is well integrated with DOM, allowing to manipulate charts elements with the DOM, and most importantly setting DOM events. By contrast Canvas charting libraries must reinvent the DOM wheel to manage events. So unless you intend to build static graphs with no event handling, SVG/VML solutions should be better.
For SVG/VML solutions there are many options, including:
There are a number of charting libraries based on Raphael, including (but not limited to):
- gRaphael, an extension of the Raphael graphic library
- Ico, with an intuitive API based on a single function call to create complex charts
Disclosure: I am the developer of one of the Ico forks on github.
Additionally ExtJS 4.0 has introduced a great set of charts – very powerful, and is designed to work with live data.
Check out http://www.highcharts.com !
It maybe not exactly what you are looking for, but
Google’s Chart API is pretty cool and easy to use.
It also allows making nice interactive graphics and visualizations.
Although it is only for modern web browsers
UPDATE: The protovis team has moved to another library called d3.js (Data Driven Documents) as they said:
“The Protovis team is now developing a new visualization library, D3.js, with improved support for animation and interaction. D3 builds on many of the concepts in Protovis”
The new library can now be found in:
To my mind the major pros and cons were as follows. The SVG based solutions like Raphael (and offshoots) are great if you want to construct highly dynamic/interactive charts. Or if you charting requirements are very much outside the norm (e.g. you want to create some sort of hybrid chart or you’ve come up with a new visualization that no-one else has thought of yet). The downside is the learning curve and the amount of code you will have to write. You won’t be banging out charts in a few minutes, be prepared to invest some real learning time and then to write a goodly amount of code to produce a relatively simple chart.
I went with JQplot which is a canvas based solution since I only really needed some standard types of charts. From my research and playing around with the various choices I found it to be reasonably full-featured (if you’re only after the standard charts) and extremely easy to use, so I would recommend it if your requirements are similar.
To summarize, simple and want charts now, then go with JQplot. Complex/different and not pressed for time then go with Raphael and friends.