我对d3和Raphael都很着迷。我知道 Raphael 是建立在 D3 之上的,并且它是跨浏览器兼容的,但我不确定哪一个更适合什么场景。有人可以阐明一下吗?我的直接用例可能是使用 SIMILE 时间线并将其与状态图集成(我打算使用 d3/Raphael)。谢谢!
4 回答
Raphael 不是基于 D3 构建的。
Raphael 将帮助您绘制元素。D3 更全面,将帮助您将数据绑定到元素。所以我会说D3更强大。这个论坛讨论讨论使用 D3 呈现 SIMILE 时间线,他们指的是在 D3 中实现时间线的这个项目。所以乍一看,D3 就是你的答案。
但是,鉴于 D3 似乎没有一个小部件可以为您处理 SIMILE 时间线,因此 Raphael 或 D3 可能是一个不错的选择。也就是说,除了 D3 不能很好地与 Internet Explorer 的早期版本配合使用之外,如本文所述。因此,如果您需要支持早期版本的 IE,最好使用 Raphael。
D3 比 Raphael 更难学习,但在这两种情况下,您还必须学习 SVG 才能创建更好的动画。另一方面,通常 D3 可视化比类似的 Processing 或 Raphael 示例需要更少的数学,因为已经有许多预打包的布局。
我想说 D3 是更好的选择,原因很明显:D3 基于当前的 Web 标准堆栈(HTML、DOM——即使你讨厌它,你也需要使用它、CSS、SVG,甚至是 Canvas),并且是一个库用于处理数据。作为一个数据框架,D3 还包含:
- 大量的算法和布局(强制布局、堆栈布局、树等),
- 一些基本的数据整理功能(嵌套、交叉、分组、汇总 - 请参阅以下示例:http ://bl.ocks.org/phoebebright/raw/3176159/ ),
- jQuery 样式选择,
- 以及可视化原语(d3.svg 附带简单图形所需的一切)。
就目前而言,d3 不仅在许多情况下比 Raphael 和 Processing 更好,而且还是 jQuery、underscore.js 和其他框架的可行替代品。有很多建立在它之上的图表库,所以你总是可以拖放一些很酷的图表并重写它周围的数据包装器。
您可以使用此界面找到一些不错的时间线示例:http: //biovisualize.github.com/d3visualization/#visualizationType=timeline
两者都是不同的动物。
RaphaelJS简化和扩展了基于 SVG 和 VML 的矢量图形功能。
D3js只是操纵 DOM 并依靠图形标准(SVG 和 Canvas,在条形图上你也可以使用 DIV)来绘制。例如d3.svg.symbol()
返回d
参数的内容以将其传递给path
SVG 上的元素,但不要自行绘制符号。
您可以使用D3js来操作数据并使用Raphael进行绘制。
这个博客解释了如何结合D3js + Raphael。并检查D3 的 Raphael实现。
作为一名公共部门顾问,我发现学习 Raphael 对我来说是一项更好的投资,因为我的客户很多时候都使用旧版本的浏览器。我目前的客户只使用 IE7,Raphael 可以完美地使用它,而 D3 则不能。
就我个人而言,我宁愿使用 D3,但从专业上讲,这不是我的实际情况。