ツリー図:階層データと構造的関係

親子関係が明確な構造化データを提示する場合——組織図、ファイルシステムのディレクトリ、意思決定木、分類学的分類など——ツリー図直感的な視覚的フレームワークを提供します。データノードを分岐するパスに沿って配置することで、ツリー図はユーザーがネストされた階層を探索し、中心のルートノードからサブブランチにかけての接続を追跡できるようにします。

ツリー図の仕組み

Apache EChartsでは、ツリー図はtype: 'tree'を使用します。明確なX軸とY軸を持つ標準的なチャートとは異なり、ツリー図はネストされたJavaScriptオブジェクトからレイアウト位置を自動的に構築します。そのオブジェクトにはnameとオプションのchildren配列が含まれます。

1. 必須の設定

基本的なツリー図を構築するには、ネストされたデータ構造を定義し、シリーズ配列内にtype: 'tree'を設定します:

option = {
    tooltip: {
        trigger: 'item',
        triggerOn: 'mousemove'
    },
    series: [
        {
            type: 'tree',
            data: [{
                name: 'CEO',
                children: [
                    {
                        name: '製品担当バイスプレジデント',
                        children: [
                            { name: 'プロダクトマネージャー' },
                            { name: 'UXデザイナー' }
                        ]
                    },
                    {
                        name: 'エンジニアリング担当バイスプレジデント',
                        children: [
                            { name: 'テックリード' },
                            { name: 'DevOpsエンジニア' }
                        ]
                    }
                ]
            }],
            top: '5%',
            left: '15%',
            bottom: '5%',
            right: '20%',
            symbolSize: 10,
            label: {
                position: 'left',
                verticalAlign: 'middle',
                align: 'right',
                fontSize: 12
            },
            leaves: {
                label: {
                    position: 'right',
                    verticalAlign: 'middle',
                    align: 'left'
                }
            },
            expandAndCollapse: true,
            animationDurationUpdate: 750
        }
    ]
};

 

高度なレイアウト方向

ツリー図は、レイアウト方向を変更するか、円形表示に切り替えることで、異なるスペース制約やデザイン要件に適応できます。

1. 円形ツリー図レイアウト

設定してlayout: 'radial'中心点から分岐を外側に投影するように設定し、多くのリーフノードを持つ広い階層に適しています:

option = {
    tooltip: {
        trigger: 'item',
        triggerOn: 'mousemove'
    },
    series: [
        {
            type: 'tree',
            layout: 'radial',
            data: [{
                name: 'ルート',
                children: [
                    {
                        name: 'ブランチA',
                        children: [
                            { name: 'A1' },
                            { name: 'A2' },
                            { name: 'A3' }
                        ]
                    },
                    {
                        name: 'ブランチB',
                        children: [
                            { name: 'B1' },
                            { name: 'B2' }
                        ]
                    },
                    {
                        name: 'ブランチC',
                        children: [
                            { name: 'C1' },
                            { name: 'C2' },
                            { name: 'C3' },
                            { name: 'C4' }
                        ]
                    }
                ]
            }],
            top: '18%',
            bottom: '14%',
            right: '18%',
            left: '18%',
            symbolSize: 12,
            initialTreeDepth: 2,
            animationDurationUpdate: 750
        }
    ]
};

 

レイアウトとスタイルの微調整

ノード記号、線のカーブ、レベルごとのフォーマットをカスタマイズすることで、大きな図のなかで重要な構造階層を強調できます。

1. カーブした接続線とレベルベースのノードスタイル

次を使用してlineStyle.curveness接続線を滑らかにし、levels配列構成を定義して、階層におけるノードの深さに応じてスタイルを設定します:

option = {
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            type: 'tree',
            orient: 'TB', // 上から下への方向
            data: [{
                name: 'プロジェクトルート',
                children: [
                    {
                        name: 'フロントエンド',
                        children: [
                            { name: 'React' },
                            { name: 'Vue' }
                        ]
                    },
                    {
                        name: 'バックエンド',
                        children: [
                            { name: 'Node.js' },
                            { name: 'Python' }
                        ]
                    }
                ]
            }],
            top: '10%',
            left: '10%',
            bottom: '10%',
            right: '10%',
            symbol: 'emptyCircle',
            symbolSize: 14,
            edgeShape: 'polyline', // カーブではなく明確な矩形接続を使用
            initialTreeDepth: 2,
            lineStyle: {
                width: 2,
                color: '#ccc'
            },
            label: {
                position: 'top',
                fontSize: 12
            },
            leaves: {
                label: {
                    position: 'bottom'
                }
            }
        }
    ]
};

 

戦略的なベストプラクティス

  • 初期折りたたみ深度を制御する:設定してinitialTreeDepth(例:1 または 2)を大規模なデータセットに設定することで、初期ロード時にチャートを整理した状態に保ちつつ、ユーザーがノードをクリックして詳細を展開できるようにします。
  • 適切な方向を選択する:長いラベルテキストを含む深いネスト構造には水平方向(`LR`)またはラジアル(`radial`)レイアウトを使用し、浅く広い組織構造には垂直方向(`TB`)レイアウトを使用してください。
  • リーフノードを区別する:次を使用してleaves末端ノードを親コンテナノードとは異なるスタイルで表示するため、ユーザーが枝分かれと終端を簡単に区別できるようにします。
上部へスクロール