What kind of data do you have to visualize?
Before starting with a list of solutions I would recommend to ask your self the following questions:
- What kind of visualization do I want?
- What is my time/money budget for the visualization?
- Should the user interact with the visualization?
I'll try to group the kind of decisions in main sections based on the answers of the questions above.
This is an overall explanation based on JS libraries I know, but the general discourse will apply to any language (I hope).
Bare also in mind that if you have to ship your visualizations to customer you are likely to provide support as well, so in this case the community kind of support may not be the best fit for you.
You want something to create a specific visualization, quickly
For bar chart / pies / histograms charts there are plenty of libraries to create something very cool in few lines.
You can start to look at Google charts
for easy and relatively customizable charts, passing through vega
and ending with solutions like chart.js
which are libraries built on top of d3.js
.
All those libraries are free, and the last two have a open source license.
There are also HighCharts
and Tableau
which provide a commercial solution like Google Chart with more personalization.
If you need a network visualization library instead I would recommend SigmaJS
and KeyLines
.
While the former is quite nice for simple network visualizations, the second one has more advanced tools such Combos and SNA metrics as well, to create enhanced viz.
SigmaJs is both free and open source while KeyLines and has a commercial license.
To create instead geographic kind of visualization I would recommend MapBox
and CartoDB
which provide nice tools to create maps. They are built on top of leaflet.js
.
The licenses in this case are commercial while they provide also free/cheap accounts for small developers.
If you need to do 3D visualization I think that the answer is one honestly: Three.js
.
While you can find a huge amount of examples, sometimes create a cool visualization can require a lot of time if you're not a close friend of matrices or OpenGL in general...
Three.js
is a free and open source library.
All the mentioned libraries above let you bind callback to events, some to specific ones, others to high level ones.
If you are looking for something even more specific - such time series, etc... - you can probably find other specific libraries as well.
You need specific kinds of charts and you have plenty of time to spend, but no money
Well, in this case I would recommend all the open source libraries above, plus the following:
nvd3.js
which is built on top of d3.js
and let you have more freedom compared to solution like chartjs
or vega
. Free and open source.
VivaGraph.js
for network visualization solution. Free and open source.
leaflet.js
for geographical stuff - with all its plugin universe. Free and open source.
- 'Kartograph' - for both JS and Python - for geographical kind of visualizations. free and open source.
You have plenty of time and you want to create something of unique - for free of course!
There are libraries for generic visualization projects in JS, such d3.js
, Raphael.js
, processing.js
and paper.js
that let you create basically every kind of (web-based) visualization you want with a not-so obvious knowledge of the language - Javascript - and framework itself.
And time: lot of time depending on the complexity of viz you have in mind.
Note
Processing is the Java(-like) parent of the JS version above and a good alternative to a web-based solution.
Disclaimer
I'm part of the the Keylines dev team.
More specific stuff:
Here's some answers for specific language viz libraries:
* Python viz library
* Java viz library