mcpField
D
data-visualization

data-visualization

github.com/ntcodingデータ・データベース358123 回インストール32 週間前に更新
リポジトリ

data-visualization について

data-visualizationは、チャートやグラフ、ダッシュボードを作る開発者やデータ担当者向けの設計スキルです。視覚表現、チャート選択、レイアウト、描画、操作性、アクセシビリティを扱い、既存のライブラリやアルゴリズムも案内します。

主な機能

  1. 01視覚表現とチャート選択
  2. 02操作性と注釈のパターン
  3. 03グラフレイアウト用ライブラリの指針
  4. 04描画と性能の基準
  5. 05アクセシビリティと配色の指針

活用シーン

  1. 01データや問いに合うチャートの選択
  2. 02操作可能なグラフやダッシュボードの設計
  3. 03可視化の性能とアクセシビリティの改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ntcoding/claude-skillz --skill data-visualization

インストール後、Claude Code で/data-visualizationを入力して読み込まれたか確認します。

詳細

データビジュアライゼーション

ビジュアライゼーションはコミュニケーションです。すべての視覚要素は、理解を助けるものでなければなりません。

重要なルール

🚨 確立されたアルゴリズムを使ってください。 グラフレイアウト、ツリーレイアウト、空間インデックスなどの問題は、すでに解決されています。独自に実装する前に、dagre、d3-force、ELK.js を確認してください。

🚨 知覚精度に基づいてエンコーディングを選んでください。 位置は長さより、長さは角度より、角度は面積より、面積は色より正確です。バブルチャートより円グラフを、円グラフより棒グラフを優先してください。

🚨 色だけに頼らないでください。 男性の8%は色覚異常があります。補助的なエンコーディングとして、形状、パターン、ラベルを使ってください。

🚨 スケールに合わせてレンダリング方法を選んでください。 要素数が1000未満なら SVG、1000~10000なら Canvas、10000を超えるなら WebGL を使ってください。


1. 視覚的エンコーディング

マークとチャネル

マークは、データを表す幾何学的な基本要素です。

  • 点(散布図、ドットプロット)
  • 線(折れ線グラフ、ネットワークのエッジ)
  • 面(棒グラフ、面グラフ、地図)

チャネルは、マークに適用される視覚的な特性です。

  • 位置(x、y 座標)
  • 大きさ(長さ、面積、体積)
  • 色(色相、彩度、明度)
  • 形状(円、四角形、三角形)
  • 向き(角度、傾き)
Cleveland と McGill の階層(1984年)

知覚精度の高い順に並べた視覚的エンコーディング:

  1. 共通スケール上の位置(最も正確)
  2. 揃っていないスケール上の位置
  3. 長さ
  4. 角度/傾き
  5. 面積
  6. 体積
  7. 色の彩度/色相(最も不正確)

示唆: 棒グラフ(位置)> 円グラフ(角度)> バブルチャート(面積)

前注意的属性

意識せずに250ミリ秒未満で処理される特性:

  • 色(色相、彩度)
  • 形態(向き、長さ、幅、大きさ、形状)
  • 空間的位置
  • 動き

最も重要なデータには前注意的属性を使ってください。自動的に「目立つ」ようになります。

データ型ごとのチャネルの有効性
データ型最適なチャネル
定量位置、長さ、角度、面積
順序位置、密度、彩度
カテゴリ形状、色相、空間領域

2. インタラクション設計

シュナイダーマンのマントラ(1996年)

「まず全体像を示し、ズームとフィルターを使い、その後、必要に応じて詳細を表示する」

  1. 全体像 — データセット全体を表示し、文脈を示す
  2. ズームとフィルター — 複雑さを抑え、対象を絞り込む
  3. 必要に応じた詳細表示 — ツールチップ、クリックして展開、ドリルダウン
インタラクションパターン
パターン使用例
ブラッシングと連動連携したビュー間で相互にハイライト表示する
フォーカス+コンテキスト魚眼レンズ、必要に応じた詳細表示パネル
直接操作ノードをドラッグする、要素のサイズを変更する、並べ替える
アニメーション付き遷移状態間の変化をユーザーが追えるようにする
パンとズーム大規模なビジュアライゼーションを移動する
フィルタリングデータを関連するサブセットに絞り込む
選択特定のデータポイントをハイライト表示する

3. チャートの選択

質問の種類に応じた選択
質問チャートの種類理由
値を比較するには?棒グラフ位置によるエンコーディングが最も正確
時間とともにどう変化したか?折れ線グラフ傾向を示し、多数の点を扱える
分布はどうなっているか?ヒストグラム、箱ひげ図広がり、外れ値、形状を示す
関係性はどうなっているか?散布図相関やクラスターを明らかにする
全体に占める割合はどうなっているか?積み上げ棒グラフ、ツリーマップ構成を示す
つながりはどうなっているか?ネットワークグラフ、サンキーダイアグラム関係性やフローを示す
階層構造はどうなっているか?ツリー、サンバースト、ツリーマップ親子関係を示す
どこにあるか?コロプレス図、シンボルマップ地理的な文脈を示す
データ量に応じた選択
データ量方法
20点未満シンプルなチャート、直接ラベル付け
20~500標準的なビジュアライゼーション
500~5000集約やフィルタリングを検討
5000以上集約が必須。そうでなければ Canvas/WebGL
よくあるアンチパターン
  • ❌ 5区分を超える円グラフ(棒グラフを使ってください)
  • ❌ 十分な根拠のない3Dチャート
  • ❌ 関連性のないスケールを使った二重軸(誤解を招きます)
  • ❌ 棒グラフでゼロ以外を基準とすること(知覚を歪めます)
  • ❌ 明確な表示のない切り詰められた軸

4. 色

パレットの種類
種類用途例
シーケンシャル低い値から高い値ブルー、グリーン、Viridis
ダイバージング中央値から両方向に分かれる値RdBu、BrBG、Spectral
カテゴリカル個別のカテゴリSet2、Tableau10、Category10
色覚多様性への配慮
  • 男性の8%、女性の0.5%に色覚異常があります
  • 色だけに頼らないでください。形状、パターン、ラベルも使用してください
  • 安全なシーケンシャルパレット:viridis、cividis、plasma
  • 安全なカテゴリカルパレット:ColorBrewerの色覚多様性に配慮したオプション
  • テストツール:Coblis、Sim Daltonism、Chrome DevTools
知覚的な均一性
  • レインボーカラーマップ(jet)は避けてください。知覚される色の変化が不均一です
  • シーケンシャルデータにはviridis、parula、cividisを使用してください
  • これらを使うと、値の間の知覚上の距離が均等になります
色のガイドライン
  • テキストのコントラスト比は4.5:1(WCAG AA)
  • UIコンポーネントのコントラスト比は3:1
  • 明確に区別できるカテゴリカルカラーは最大7~10色
  • 強調には彩度や明度の変化を使用してください

5. レイアウトアルゴリズム

🚨 レイアウトアルゴリズムを実装する前に、必ず既存のライブラリを確認してください。

アルゴリズムとライブラリの対応
問題アルゴリズムライブラリ
階層型/DAGグラフSugiyama(1981)dagre、ELK.js
力指向ネットワークFruchterman-Reingold(1991)d3-force、Cytoscape.js
ツリーレイアウトReingold-Tilford(1981)d3-hierarchy
ツリーマップSquarified(2000)d3-hierarchy、ECharts
円形パッキングWang(2006)d3-hierarchy
サンキーダイアグラム—d3-sankey
コードダイアグラム—d3-chord
大規模グラフ(1万以上)WebGL+空間インデックスSigma.js、G6、deck.gl
空間クエリクアッドツリー、Rツリーd3-quadtree、rbush
エッジ交差の最小化Barth(2002)dagre/ELKに組み込み
各レイアウトの用途
レイアウト最適な用途
Sugiyama(dagre)フローチャート、依存関係グラフ、方向性のあるDAG
力指向ソーシャルネットワーク、自然な関係性、探索
ツリー各ノードが単一の親を持つ階層
ツリーマップ定量的な値を持つ階層
円形中心的なノードやリング構造の強調
マトリックスエッジが重なり合うような密なグラフ

これらの問題はすでに解決されています。ゼロから実装しないでください。


6. レンダリングとパフォーマンス

レンダリング技術のしきい値
<1000 elements    → SVG
                    - DOM events work naturally
                    - Accessibility (ARIA) supported
                    - Crisp at any zoom level
                    - CSS styling

1000-10000        → Canvas
                    - Batch rendering
                    - Manual hit testing required
                    - Lower memory footprint
                    - requestAnimationFrame for animation

>10000            → WebGL
                    - GPU acceleration
                    - Sigma.js, deck.gl, regl
                    - Complex setup
                    - Limited text rendering
パフォーマンスパターン
パターン使用する場面
Web Workersレイアウト計算(メインスレッドをブロックしない)
空間インデックスクアッドツリー/Rツリーを使ったヒット検出
詳細度制御遠方または小さな要素を簡略化する
ビューポートカリング表示中の要素だけをレンダリングする
デバウンス負荷の大きい操作(ズーム、フィルター)
仮想化グラフコンポーネントの長いリスト
集約個別にレンダリングするにはデータポイントが多すぎる場合
アンチパターン
  • ❌ SVGノードを5000個使用する(Canvasを使用してください)
  • ❌ メインスレッドでレイアウトを計算する
  • ❌ 空間インデックスを使わずにヒットテストを行う
  • ❌ 画面外の要素をレンダリングする
  • ❌ 数千個の要素を個別にアニメーションさせる

7. ライブラリ

グラフレイアウト
ライブラリ最適な用途備考
dagre階層型DAG、フローチャートSugiyamaアルゴリズム、適切なデフォルト設定
dagre-d3dagreとD3によるレンダリングSVG出力
ELK.js複雑なレイアウト、複合グラフEclipse Layout Kernel、高度に設定可能
d3-force自然なネットワークFruchterman-Reingold、カスタマイズ可能な力
Cytoscape.jsグラフ分析と可視化豊富なアルゴリズムライブラリ
Sigma.js大規模グラフ(1万以上)WebGLレンダリング
G6/AntVエンタープライズグラフ多機能、中国語圏のエコシステム
vis-network素早いプロトタイプ使いやすいAPI、カスタマイズ性は限定的
チャート作成
ライブラリ最適な用途備考
D3.jsカスタムで高いインタラクティブ性が必要な場合低レベルで、最大限の制御が可能
Observable Plotすばやい探索D3チームによるライブラリで、優れたデフォルト設定
RechartsReactとの連携宣言的で、組み合わせやすい
VictoryReactとの連携アニメーションに対応
ECharts機能豊富なダッシュボードモバイルに適しており、大規模なデータセットに対応
Vega-Liteグラフィックの文法宣言的なJSON仕様
Chart.jsシンプルなチャート導入が簡単で、カスタマイズ性は限定的
Plotly科学的な可視化3Dに対応し、インタラクティブ性が高い
D3と高レベルライブラリの使い分け

D3を使う場合:

  • 描画を完全に制御する必要がある
  • 独自の、またはカスタムの可視化を構築する
  • 既存のSVG/Canvasコードと統合する
  • カスタム最適化が必要な、パフォーマンス重視の用途

高レベルライブラリを使う場合:

  • 標準的なチャートタイプで十分である
  • 開発時間の短縮が重要である
  • チームのD3経験が浅い
  • 組み込みのレスポンシブ対応やアニメーションが必要である

8. 構成とレイアウト

プロジェクトの構成(ダッシュボードレベル)
  • 視覚的階層 — 最も重要な情報に最初に目が向くようにする
  • グリッドシステム — 要素を整列させ、統一感を持たせる
  • グループ化 — 関連する可視化をまとめる
  • 余白 — 無駄なスペースではなく、ゆとりを持たせる
  • 読み進める流れ — 欧米の読者にはZパターンまたはFパターンを用いる
チャートの構成(単一のチャート)
要素ガイドライン
タイトル明確で説明的なものにし、左上または上部中央に配置する
サブタイトルタイトルの下に小さく表示し、追加の文脈を示す
軸単位を付けてラベルを表示し、意味のある間隔で目盛りを付ける
凡例可能であればチャート内に配置し、複雑な場合は外部に配置する
アスペクト比傾きの知覚に影響する。傾向を示す場合は45°になるよう調整する
余白ラベル用の十分なスペースを確保し、チャート間で統一する
アスペクト比のガイドライン
  • 折れ線グラフ: 傾向を示す場合は約16:9(傾きが45°になるよう調整)
  • 棒グラフ: 棒の数によって異なる
  • 散布図: 相関を示す場合は正方形(1:1)が一般的
  • 地図: 地理的な比率を保つ

9. 注釈

注釈の種類
種類目的
タイトル「何を」示すか。可視化の対象を明らかにする
サブタイトル追加の文脈やデータソースを示す
キャプション「それが何を意味するか」。重要な洞察や要点を示す
軸ラベル変数名と単位を示す
凡例色、形、サイズの対応関係を説明する
コールアウト特定のデータポイントを強調する
基準線ベンチマーク、目標、平均を示す
出典データの来歴を示す
ベストプラクティス
  • データだけでなく洞察に注釈を付ける — 単に「時間経過による売上」ではなく、「売上は第3四半期にピークを迎えた」とする
  • コールアウトは控えめに使う — 重要なポイントを最大1~3個強調する
  • 直接ラベルを付ける — 可能であれば凡例を別に設けず、チャート内にラベルを埋め込む
  • 文脈を示す — ベンチマーク、過去の参照値、目標を提示する
  • 情報を階層化する — 概要を常に表示し、詳細は操作に応じて表示する
テキストの階層
  1. タイトル(最大サイズ、最も太い文字)
  2. サブタイトル/キャプション
  3. 軸タイトル
  4. 目盛りラベル
  5. 注釈
  6. 出典(最小サイズ)

10. アクセシビリティ

WCAG要件
  • AAを最低基準とする(AAAが望ましい)
  • 通常のテキストではコントラスト比4.5:1
  • 大きなテキストとUIコンポーネントではコントラスト比3:1
  • 色だけで情報を伝えない
キーボード操作
  • Tabキーでインタラクティブ要素間を移動する
  • 矢印キーでデータポイント間を移動する
  • Enter/Spaceキーで選択する
  • Escapeキーでキャンセル/閉じる
スクリーンリーダーへの対応
<svg role="img" aria-labelledby="chart-title chart-desc">
  <title id="chart-title">Monthly Sales 2024</title>
  <desc id="chart-desc">Bar chart showing sales increasing from $10M in January to $15M in December</desc>
</svg>
  • ARIAのラベルとロールを使用する
  • テキストによる代替情報を提供する
  • ライブリージョンを使って動的な更新を通知する
  • 論理的な読み上げ順になるよう構成する
代替表現
  • データテーブル — すべてのチャートに代替手段として用意する
  • テキストによる要約 — 重要な洞察を説明する
  • 音響化 — 時系列データを音声で表現する
  • 触覚グラフィックス — 触覚によるアクセシビリティのために用意する

11. アンチパターンのまとめ

デザインのアンチパターン
アンチパターン問題点対処法
3D グラフ認識を歪めます2D を使用します
5 区分を超える円グラフ比較が困難です棒グラフを使用します
関連性のない 2 つの軸誤解を招く相関関係を示しますグラフを分けます
0 以外の基準線差を誇張します0 から始めます
虹色のカラーマップ知覚上の均一性に欠けますviridis を使用します
色だけによる表現色覚障害のある人を排除します形状やパターンを追加します
グラフの装飾過多データから注意をそらします装飾を取り除きます
点の過剰な重なりデータ密度が見えなくなります集約するか、ジッターを加えます
実装のアンチパターン
アンチパターン問題点対処法
独自のグラフレイアウト解決済みの問題を再発明していますdagre/ELK を使用します
5000 個の SVG ノードパフォーマンスが低下しますCanvas を使用します
メインスレッドでのレイアウト処理UI をブロックしますWeb Worker を使用します
空間インデックスなしヒット検出が遅くなりますクアッドツリーを使用します
画面外の要素をレンダリング計算が無駄になりますビューポートカリングを行います

12. 学術的基盤

先駆的な論文
論文年貢献
Cleveland & McGill「Graphical Perception」1984視覚表現の階層
Shneiderman「The Eyes Have It」1996概観・ズーム・フィルター・詳細のマントラ
Gansner et al.「Drawing Directed Graphs」1993dagre の基盤
Fruchterman & Reingold「Force-directed Placement」1991d3-force の基盤
Sugiyama et al.「Hierarchical Systems」1981階層型グラフレイアウト
Barth et al.「Bilayer Cross Counting」2002エッジ交差の最小化
Brewer「Color Use Guidelines」1994ColorBrewer のパレット
重要なリソース
リソース種類対象
ColorBrewer (colorbrewer2.org)ツールアクセシブルなカラーパレット
From Data to Viz (data-to-viz.com)ガイドグラフ選択の判断ツリー
Visualization Analysis & Design (Munzner)教科書包括的な理論
Data Visualisation (Kirk)教科書実践者向けガイド
Visual Display of Quantitative Information (Tufte)教科書データインク比、グラフの装飾過多
D3 Gallery (observablehq.com/@d3/gallery)例実装パターン

まとめ

🚨 可視化を実装する前に:

  1. どんな問いに答えようとしていますか? → グラフの種類を選択します
  2. データ量はどのくらいですか? → レンダリング技術を選択します
  3. 確立されたアルゴリズムはありますか? → ライブラリを使用します
  4. アクセシブルですか? → 色、キーボード、スクリーンリーダーを確認します
  5. 知覚に関するベストプラクティスに従っていますか? → 表現の階層を確認します

コメント