有人会推荐一个特定的JavaScript图表库 - 特别是一个根本不使用闪存的库吗?
对于不需要Flash的纯JavaScript图表,有越来越多的开源和商业解决方案.在此响应中,我将仅提供开源选项.
对于不需要Flash的图形,有两类主要的JavaScript解决方案:
基于Canvas,使用ExplorerCanvas在IE中呈现,而ExplorerCanvas依赖于VML
基于标准的浏览器上的SVG,在IE中呈现为VML
这两种方法都有利弊,但对于图表库我会推荐后者,因为它与DOM很好地集成,允许用DOM操纵图表元素,最重要的是设置DOM事件.相比之下,Canvas图表库必须重新发明DOM轮来管理事件.因此,除非您打算构建没有事件处理的静态图形,否则SVG/VML解决方案应该更好.
对于SVG/VML解决方案,有许多选项,包括:
Dojox Charting,如果您已经使用Dojo工具包,那就太好了
基于Raphael的解决方案
Raphael是一个非常活跃,维护良好,成熟的开源图形库,具有非常好的跨浏览器支持,包括IE 6到8,Firefox,Opera,Safari,Chrome和Konqueror.Raphael不依赖于任何JavaScript框架,因此可以与Prototype,jQuery,Dojo,Mootools等一起使用...
有许多基于Raphael的图表库,包括(但不限于):
gRaphael,拉斐尔图形库的扩展
Ico,基于单个函数调用的直观API,用于创建复杂的图表
披露:我是github上的一个Ico分支的开发者.
如果你正在使用jQuery,我发现flot非常好 - 试试这些例子,看看它们是否适合你的需求,但我发现它们可以完成当前项目所需的大部分工作.
此外,ExtJS 4.0引入了一组很棒的图表 - 功能非常强大,旨在处理实时数据.
查看http://www.highcharts.com!
Highcharts是一个用纯JavaScript编写的图表库,提供了一种向您的网站或Web应用程序添加交互式图表的简便方法.Highcharts目前支持直线,样条曲线,面积,区域线,列,条形图,饼图和散点图类型.
它可能不是你想要的,但
谷歌的Chart API非常酷,易于使用.
还有另一个基于SVG的javascript库.它被称为Protovis,它来自斯坦福可视化集团
它还允许制作漂亮的交互式图形和可视化.
http://vis.stanford.edu/protovis/ex/
虽然它仅适用于现代Web浏览器
更新: protovis团队已经迁移到另一个名为d3.js(数据驱动文档)的库,他们说:
"Protovis团队正在开发一个新的可视化库D3.js,它改进了对动画和交互的支持.D3基于Protovis中的许多概念构建"
现在可以在以下位置找到新库:
http://mbostock.github.com/d3/
更新2:
"人力车"是一个用于创建交互式时间序列图的JavaScript工具包.基于d3.js简化了很多d3.js的工作虽然功能稍弱.
http://code.shutterstock.com/rickshaw/
jqPlot很棒.如果您的要求相当"正常"并且您只想绘制一些图表,那么您可能会被js图表选项的数量所淹没.假设你不想做几个小时的研究,那就去jqPlot,因为它可能是你最好的选择.它涵盖了大多数人的大多数用例.一些替代方案专门针对某种类型的图表或者在考虑某个特定用例的情况下构建.
我最近在寻找一个javascript图表库,我在最终解决jqplot之前评估了一大堆,这非常符合我的要求.正如Jean Vincent的回答所提到的,你真的在基于画布和基于svg的解决方案之间做出选择.
在我看来,主要的优点和缺点如下.如果您想构建高度动态/交互式图表,基于SVG的解决方案(如Raphael(和分支))非常棒.或者,如果您图表的要求都非常规范之外(例如,你想创建某种混合图表或你想出来的,没有人其他人想到的又一个新的可视化).缺点是学习曲线和您必须编写的代码量.你不会在几分钟内敲打图表,准备投入一些实际的学习时间,然后写出大量的代码来生成一个相对简单的图表.
如果您的图表要求是合理标准的,例如您想要一些线条图或条形图或者可能是一个或两个饼图,交互性有限,那么值得研究基于画布的解决方案.几乎没有任何学习曲线,您将能够在几分钟内获得基本图表,您不需要编写大量代码,只需几行基本的javascript/jquery即可.当然,您只能生成库支持的特定类型的图表,通常限于各种风格的line,bar,pie.交互选择将是非常有限的,也就是说许多库不存在,尽管有一些有限的悬停效果可能与更好的.
我选择了JQplot这是一个基于画布的解决方案,因为我只需要一些标准类型的图表.从我的研究和各种选择中我发现它是相当全功能的(如果你只是在标准图表之后)并且非常容易使用,所以如果你的要求相似我会推荐它.
现在总结简单和想要的图表,然后使用JQplot.复杂/不同,没有时间压力,然后与拉斐尔和朋友一起去.