web-dev-qa-db-ja.com

d3.jsとchart.jsの比較(グラフのみ)

プロジェクトでchart.jsを数回使用しましたが、d3.jsを使用したことはありません。多くの人が、d3.jsはチャートに最適なjavascriptフレームワークであると言いますが、特にchart.jsとの比較が必要な場合は、誰もその理由を説明できません。

私はこれを見つけました: http://www.fusioncharts.com/javascript-charting-comparison/ しかし、それは私が探していたものではありません。

これらのフレームワークの使いやすさとパフォーマンス(チャートのみ)の比較について誰もが知っていますか?

69
mendrugory

d3.jsは「チャート」ライブラリではありません。SVG/HTMLを作成および操作するためのライブラリです。データの視覚化と操作を支援するツールを提供します。これを使用して従来のグラフ(棒、折れ線、円グラフなど)を作成できますが、さらに多くのことができます。もちろん、この「非常に多くの能力を備えた」学習曲線は急勾配になります。 d3.js-nvd3.jsdimple.jsdc.jsの上に構築された従来のチャートライブラリはたくさんあります。

私はChart.jsに慣れていませんが、ウェブサイトをざっと見てみると、ミルチャートライブラリの実行に近いことがわかります。 6つの基本的なチャートタイプをサポートしており、あなたは決してやるつもりはありません stufflikethiswithitしかし、APIは簡単に見え、使いやすいと確信しています。

それ以外は、2つの最も明白な違いは、Chart.jsはキャンバスベースであるのに対して、d3.jsは主にSVGについてです。 (今私は主にと言います。なぜならd3.jsはすべての種類のHTML要素を操作できるので 使用することさえ可能 キャンバスに描くのを助けるためです。)一般に、canvasは多数の要素に対してSVGを実行します(私は非常に大規模に話している-何千もの点、線など)。一方、SVGは操作や操作が簡単です。 SVGを使用すると、各ポイント、ラインなどがDOMの一部になります。そのポイントを緑にしたいので、変更するだけです。 canvasでは、変更を加えるために再描画される静的な描画が行われます。もちろん、通常は気付かないほど高速に描画されます。これが 良い読み物 Microsoftのものです。

179
Mark

モバイルデバイスでチャートを表示するための高速チャートライブラリを探しているので、パフォーマンスは私にとって重要でした。また、商用利用を可能にするライセンスが必要でした。私は比較しました:

  1. d3に基づいているため、SVGを使用するc3
  2. canvasを使用しているchart.js

グラフはネイティブアプリ内のWebViewコンポーネント内にロードされ、すべてのデータ(JSライブラリを含む)はローカルなので、httpリクエストによる速度低下はありません。パフォーマンスをさらに最大化するために、すべてを1つのファイルに追加します。

約500個のデータポイントを含む4つのグラフ(線、棒、円、線/棒のコンボ)をロードしました。

私の時間測定は、htmlページの実際のロードを除外しました。レンダリングが終了するまで、チャートライブラリコードの使用を開始した瞬間からフォームを測定しました。すべてのチャートアニメーションがオフになりました。

C3は、最新のAndroidおよびIPhoneデバイスで約1500〜1800ミリ秒かかりました。 iPhoneはAndroidよりも約100ミリ秒優れています。

Chart.jsには約400〜800ミリ秒かかりました。 Androidは、iPhoneよりも約300ミリ秒優れています。

驚くことではありませんが、SVGは遅いです。ユースケースによっては、遅すぎるかもしれません。

デスクトップコンピューターでのc3のレンダリングは約150〜200ミリ秒で、charts.jsは約80〜100ミリ秒でした。 AndroidとiPhoneエミュレーターで同じテストを実行すると、デスクトップと同じ結果が得られました。したがって、モバイルデバイスの速度低下は、ハードウェア/処理の制限によるものです。

役立つことを願っています

26
haferblues

2016年更新

一般的な経験則は次のとおりです。

d3.js-インタラクティブな視覚化に最適

chart.js-すばやく簡単に最適

他のいくつかのチャートライブラリ が増えているので、テストを続け、 オープンソース に貢献することを忘れないでください!

19
the_red_baron