web-dev-qa-db-ja.com

SVGとHTML5のキャンバスベースのグラフ

pythonバックエンドを使用してブラウザーでグラフを描画する必要があります(ここでは問題にならない場合があります)。これを実現するためのJQPlot、D3、Google Chartsなどのライブラリが多数あります。

しかし、それらを分類すると、HTML5 CanvasベースまたはSVGベースのいずれかになります。どちらも独自のスペースで重要なテクノロジーです。だが

for charting as a subject, shall I go with SVG based libraries or 
HTML5 Canvas based libraries. What are downside and benefits of 
both approaches. 

私はこれまでチャート作成の経験がなく、プロジェクトを開始した後で壁にぶつけたくありません。

34
Vivek Jha

大量のデータを含むプロジェクトは、キャンバスを優先する場合があります。 SVGアプローチは通常、(パスを作成しない限り)DOMノードをポイントごとに作成します。

  1. DOMツリーのサイズの爆発

  2. パフォーマンスの問題

パスを使用すると、この問題を回避できますが、対話性が失われます。

株価チャートを作成しているとします。たとえば、最大5年と取引終了データのサンプルのみでチャートについて話している場合、答えは明らかにSVGだと思います。取引の初日からのウォルマートの履歴データを見たり、1分ごとに完全な取引情報を表示したりする場合は、SVGを注意深く確認する必要があります。特に、1つのサンプルを1つのSVGノードに移動する場合は、SVGがバラバラになるため、ファンシーなメモリ管理とフェッチオンデマンドアプローチを採用する必要があります。

interactivityが要件である場合、SVGは次のように簡単にエッジを持ちます。

  • 保持モードAPIです
  • 一般的なイベントハンドラーを使用できます。
  • ノードの追加/削除などが簡単にできます。

もちろん、fullインタラクティビティが必要な場合は、パスの折りたたみなど、SVGのスケーリングを可能にするメカニズムに逆行する可能性があるため、固有のテンションがあります。

極端な場合にはトレードオフがあります。サイズが小さい場合、答えはSVGの手に負うところです。サイズが大きく対話性がない場合の答えは、パス描画のみまたはCanvasを使用したSVGです。サイズが大きく対話性が必要な場合は、キャンバスまたはトリッキーなSVGを使用する必要がありますが、どちらの場合も複雑です。

ZingChartDojo など、一部のライブラリはキャンバスとSVGの両方のレンダリングを提供します。他の人は2つのオプションの1つだけを使い続ける傾向があります。

66
RockinSocks