标记,
我会尽我所能回答这个问题(披露:我是FusionCharts的联合创始人兼首席执行官——我们在那里制作 JavaScript 图表组件)。
我将我的答案分为两部分:
- 如何为您的 Web 应用程序找到图表组件?
- 如何为最终用户构建 UI 以修改这些库创建的图表?
可以通过三种方式将图表功能添加到您的 Web 应用程序。
使用服务器端图表库
首先是使用特定于平台的图表库,这些图表库通过其 API 在服务器上接受数据,创建图像来表示图表,然后流式传输这些图像。此类组件的示例有 Telerik (.NET, 付费)、Infragistics (.NET, 付费)、ComponentArt (.NET, 付费)、ChartFX (Java, .NET, 付费)、Steema (.NET, 付费)、pChart (PHP ,免费),jPGraph,还有一大堆。
使用此类组件的优点是:
- 成熟的库提供种类繁多的图表类型
- 由于图表是作为图像生成的,因此它们可以在任何地方使用,包括移动设备
- 再次借助呈现为图像的图表,外观和感觉始终保持不变
- 如果在整个应用程序中每个用户只提供一个或两个图表,则与客户端库相比使用更少的带宽,客户端库的大小可能在 50-500KB 之间,但之后会被缓存
缺点是:
- 将图表生成为图像时,服务器端会使用大量资源。对于具有许多并发用户的应用程序更是如此
- 图表提供的交互性和动画非常有限,因为您只能使用图像做很多事情
- 它们是特定于技术的。因此,如果您使用 ASP.NET 库,如果/当您迁移到 Java 时,您将不得不切换到不同的库,因此外观、感觉和功能集会有所不同。
使用托管图表 API
第二种选择是使用托管图表库,这些图表库通过查询字符串/REST API 接收数据并将图表图像返回给您的应用程序。例如旧的 Google Charting API。
这样做的好处是:
- 您不需要托管图表库,因此所有维护和升级问题都由它们管理
- 当您更改技术堆栈时,图表仍由相同的服务提供,因此外观和感觉相同
缺点:
- 此类服务不提供多种图表类型
- 机密数据需要通过服务器外部的 HTTP 传输到此类提供商
- 可以通过查询字符串发送的数据量的限制
- 同样,图表不能是交互式的,因为它们是图像
使用 JavaScript、CSS、Flash、Silverlight 或 Java 小程序的客户端图表
第三个也是最后一个选项是使用以 JavaScript/HTML5、Pure CSS、Flash、Java 小程序或 Microsoft Silverlight 编写的客户端图表库。考虑到 iOS 设备不支持专有插件这一事实,基于 Flash、Java 和 Silverlight 的插件无法在 iPad 和 iPhone 上运行。所以你可以放心地忽略它们。纯 CSS 组件非常轻量级,可用于非常基本的可视化。
这最终将我们带到了基于 JavaScript/HTML5 的图表组件。有一大堆 JavaScript 图表库,包括免费和付费的。我在下面列出了其中一些:
付费:FusionCharts Suite XT (JavaScript)、HighCharts、amcharts、AnyChart、Jqplot、ZingCharts、Wijmo、TeeChart、Sencha Touch Charts、RGpraph、Kendo UI DataViz、JSCharts、Arcadia Charts、jQChart、EJSChart、emprisejs、techoctave
免费:FusionCharts Free (Flash)、Google Chart Tools、Yahoo UI components、Flot、Milkchart、Moochart、protovis、graphael、elycharts、smootiecharts、dhtmlxchart、grafico、canvasjs、dygraphs、thejit、awesomechartjs、jchartFX。更多基于 d3.js 的免费数据可视化组件:xcharts、nvd3、rickshaw、cubism.js、Dc.js、xkcd、graphene
现在,考虑到可用组件的数量,在缩小图表组件范围时需要问自己的问题应该包括:
- 您现在和将来需要哪些图表类型?如果您需要非常基本的图表,如柱形图、饼图等,这些库中的大多数都适合您。但是,如果您甚至需要像 Pareto 或 Funnel 这样的稍微高级的图表,大多数组件都不提供此类图表。
- 让图表在最大数量的设备和 IE6 等旧版浏览器上呈现对您来说有多重要?许多开源库仅使用 SVG 进行渲染,因此不支持 IE6、7、8(世界上 6% 的人仍在使用)。
- 您可以在演示期间使用您的产品部分实现数据可视化作为 USP 吗?如果是,图表组件的外观对您来说有多重要?
- 您是否希望花费大量时间来调整基本功能的图表?例如,许多开源库在编写附加代码时启用工具提示,或者如果您在图表上的数据点超过 25 个,则需要您注意 x 轴标签重叠。或者,您是否希望这些功能开箱即用,以便您可以专注于您的应用程序和业务逻辑?
- 能够自定义图表的每个功能(包括化妆品)对您来说有多重要?例如,您是否需要能够以 3D 形式呈现图表、自定义数字的格式、控制渐变等?
- 您是否想要一个包含详尽文档和真实业务演示的组件,以便您可以轻松上手,或者您是否可以通过最少的文档和可能需要大量时间的实验来学习?
- 当某些事情没有按预期工作时,获得个性化支持对您来说是否重要,或者您是否可以在公共论坛上发帖并且没有 SLA 来回复/修复?
希望这些信息能帮助您为您的 Web 应用程序选择图表组件,让我解决第二个问题:是否有一个组件附带客户端向导供最终用户设计图表?
对于客户端图表库,简短的回答是否定的。因为,它将客户端库与特定的服务器端技术联系起来以实现数据持久性,其次,没有多少用户需要它。
一些服务器端库(Dundas 曾经有此功能)确实提供此功能,但并非图表的所有功能都可以在客户端自定义。
话虽如此,许多开发人员已经创建了此类向导供非技术用户使用。例如,在 FusionCharts,我们为 SharePoint 创建了名为 Collabion(请参阅 www.collabion.com)的向导,以及名为 oomfo (www.oomfo.com) 的 PowerPoint。虽然这些不是开源的,但如果您发现它们相关,我们很乐意分享这些代码。
另一种选择是使用内置图表组件并为最终用户提供向导的开源 BI 组件(如 Pentaho、JasperSoft 等)。但是,它们可能需要每个用户大量的服务器资源,并且安装和维护需要花费时间。
希望我已经能够回答你的问题。