メインコンテンツ

dendrogram

デンドログラム プロット

説明

dendrogram(tree) は、階層型バイナリ クラスター ツリーのデンドログラム プロットを生成します。デンドログラムは、階層ツリー内のデータ点を結合する複数の U 形の線で構成されます。各 U 字の高さは、結合されている 2 つのデータ点の距離を表します。

  • 元のデータ セットのデータ点が 30 個以下の場合、デンドログラム内の各葉ノードは 1 つのデータ点に対応します。

  • データ点の数が 30 個を超える場合、dendrogram は葉ノードの数が 30 になるように下の方の分岐を折りたたみます。結果的に、プロットの一部の葉は、複数のデータ点に対応することになります。

dendrogram(tree,P) は、葉ノードの数が P 個以下のデンドログラム プロットを生成します。元のデータ セットのデータ点の数が P 個を超える場合、dendrogram はツリーの下の方の分岐を折りたたみます。結果的に、プロットの一部の葉は、複数のデータ点に対応することになります。

dendrogram(___,Name=Value) は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、葉ノードの順序やデンドログラム プロットの向きを指定できます。

dendrogram(ax,___) は、ターゲットの座標軸にプロットを表示します。ax を最初の入力引数として指定し、その後に上記の構文での入力引数の組み合わせが続きます。

H = dendrogram(___) は、Line オブジェクトのベクトルを返します。前の構文におけるいずれかの引数の組み合わせを使用できます。

[H,T,outperm] = dendrogram(___) は、元のデータ セットの各オブジェクトの葉ノード数を含むベクトル T および、デンドログラムに示される葉のノード ラベルの順序を指定するベクトル outperm も返します。

  • 葉ノード数 P がデータ点の総数より少なく、表示される葉ノードの一部が複数のデータ点を表す場合は T を返すと便利です。

  • outperm で返されるノード ラベルの順序は、縦型のデンドログラムでは左から右、横型のデンドログラムでは下から上の順になります。

すべて折りたたむ

標本データを生成し、そのデータを使って、linkage 関数を使用して階層バイナリ クラスター ツリーを作成します。そのツリーのデンドログラムをプロットします。

rng(0,"twister") % For reproducibility
X = rand(10,3);
tree = linkage(X,"average");
dendrogram(tree)

Figure contains an axes object. The axes object contains 9 objects of type line.

標本データを生成し、そのデータを使って、linkage 関数を使用して階層バイナリ クラスター ツリーを作成します。

rng(0,"twister") % For reproducibility
X = rand(10,3);
tree = linkage(X,"average");

最適な葉の順序を計算し、デンドログラムをプロットします。

D = pdist(X);
leafOrder = optimalleaforder(tree,D)
leafOrder = 1×10

     3     7     6     1     4     9     5     8    10     2

dendrogram(tree,Reorder=leafOrder)

Figure contains an axes object. The axes object contains 9 objects of type line.

デンドログラム プロットの葉ノードの順序は、leafOrder の順列に対応します。

標本データを生成します。

rng(0,"twister") % For reproducibility
X = rand(100,2);

元のデータ セット X には 100 個のデータ点があります。

linkage 関数を使用して、階層バイナリ クラスター ツリーを作成します。その後、入力引数 P0 に設定して、ツリー全体 (100 個の葉ノード) のデンドログラムをプロットします。

tree = linkage(X,"average");
dendrogram(tree,0)

Figure contains an axes object. The axes object contains 99 objects of type line.

これで、25 個の葉ノードを含むデンドログラムをプロットします。図に表示された葉ノードと元のデータ点とのマッピングを返します。

figure
[~,T] = dendrogram(tree,25);

Figure contains an axes object. The axes object contains 24 objects of type line.

デンドログラム プロットの葉ノード 7 に含まれる元のデータ点をリストします。

find(T==7)
ans = 7×1

     7
    33
    60
    70
    74
    76
    86

標本データを生成し、そのデータを使って、linkage 関数を使用して階層バイナリ クラスター ツリーを作成します。

rng(0,"twister") % For reproducibility
X = rand(10,3);
tree = linkage(X,"average");

既定の色のしきい値を使用して水平の向きでデンドログラムをプロットします。Line オブジェクトが返されて、デンドログラムのラインの幅を変更できます。

H = dendrogram(tree,Orientation="left",ColorThreshold="default");
set(H,LineWidth=2)

Figure contains an axes object. The axes object contains 9 objects of type line.

R2024b 以降

標本データを生成し、そのデータを使って、linkage 関数を使用して階層バイナリ クラスター ツリーを作成します。

rng(0,"twister") % For reproducibility
X = rand(25,3);
tree = linkage(X,"average");

葉ノードをクラスターに割り当てます。

clusterAssignments = cluster(tree,Cutoff=1.1,Criterion="inconsistent");

デンドログラムをプロットします。クラスター割り当てに従って、ノード グループと葉ノード マーカーに色付けします。クラスター割り当てを生成するためにツリーが切り分けられる位置を示す破線を表示します。

dendrogram(tree,ClusterIndices=clusterAssignments, ...
    ShowMarkers=true,ShowCut=true);

Figure contains an axes object. The axes object contains 32 objects of type line. One or more of the lines displays its values using only markers These objects represent cluster 1, cluster 2, cluster 3, cluster 4, cluster 5, cluster 6, cluster 7.

入力引数

すべて折りたたむ

階層バイナリ クラスター ツリー。linkage 関数を使って生成する (M - 1) 行 3 列の行列として指定します。M は元のデータ セットに含まれるデータ点の数です。

正の整数値として指定される、デンドログラム プロットに含められる葉ノードの最大数。

  • 元のデータ セットのデータ点が P 個以下の場合、デンドログラム内の各葉は 1 つのデータ点に対応します。

  • データ点の数が P 個を超える場合、dendrogram は葉ノードの数が P になるように下の方の分岐を折りたたみます。結果的に、プロットの一部の葉は、複数のデータ点に対応することになります。

P を指定しない場合、dendrogram は葉ノードの最大数として 30 を使用します。ツリー全体を表示するには、P0 に設定します。

データ型: single | double

プロットの座標軸。Axes オブジェクトか UIAxes オブジェクトを指定します。ax を指定しない場合、dendrogram は、現在の座標軸を使用してプロットを作成します。axes オブジェクトを作成する方法の詳細については、axesuiaxes を参照してください。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: dendrogram(tree,Orientation="left",Reorder=myOrder) は、myOrder で指定された順序の葉ノードをもつ横型のデンドログラムを指定します。

デンドログラム プロットの葉ノードの順序。ツリー全体におけるノードの順序を指定する数値ベクトルとして指定します。順序ベクトルはベクトル 1:M の順列でなければなりません。ここで M は元のデータ セットのデータ点の数です。順序は、縦型のデンドログラムでは左から右、横型のデンドログラムでは下から上に指定します。

M がデンドログラム プロットの葉ノードの数 P (P の既定値は 30) を超えている場合は、折りたたまれたノードに一致する葉のグループを分離しない順列ベクトルのみを指定できます。

データ型: single | double

デンドログラム プロットに交差分岐があるか確認するかどうかのインジケーター。数値または logical の 1 (true) または 0 (false) として指定します。このオプションは、Reorder の値を指定したときにのみ有用です。

CheckCrossing の値を true に設定すると、葉ノードの順序によって図内に交差分岐が発生すると、dendrogram によって警告が表示されます。元のデータ セットのデータ点の数が P より大きいため、デンドログラム プロットにツリー全体が表示されない場合、葉ノードの順序によってプロットに表示されたデンドログラムで分岐が交差する際にのみ dendrogram は警告を発します。したがって、葉ノードの順序によってツリー全体で交差分岐が発生しても、それがデンドログラムの図に表示された部分でない場合は、警告は表示されません。

R2024b 以降

葉ノードのクラスター割り当て。長さ N の数値ベクトルとして指定します。Ntree の行数です。ClusterIndices の各値は範囲 [1,C] 内の整数でなければなりません。C はクラスター数です。ClusterIndices を指定した場合、関数は指定された ColorThreshold の値を無視し、代わりに、クラスター割り当てに従ってノードのグループに色付けします。ShowMarkers=true を指定した場合、関数はクラスター割り当てに従って葉ノード マーカーにも色付けします。

例: ClusterIndices=[1 1 2 1 2 1]

データ型: single | double

デンドログラム プロットの一意な色のしきい値。"default" または範囲 (0,max(tree(:,3))) のスカラー値として指定します。ColorThreshold の値が T の場合、dendrogram は、デンドログラム内の連結距離が T より小さいノードをまとめた各グループに一意の色を割り当てます。

  • ColorThreshold の値が "default" の場合、しきい値 T は最大連結距離の 70%、0.7*max(tree(:,3)) です。

  • ColorThreshold の値を指定しない場合や、(0,max(tree(:,3))) の範囲外のしきい値を指定する場合、dendrogram はデンドログラム プロットに 1 色のみを使用します。

  • ClusterIndices を指定した場合、関数は指定された ColorThreshold の値を無視し、代わりに、クラスター割り当てに従ってノードのグループに色付けします。

例: ColorThreshold=0.5

データ型: single | double | string | char

R2024b 以降

切り取り線を表示するかどうかのインジケーター。数値または logical の 0 (false) または 1 (true) として指定します。ClusterIndicesShowCut=true を指定した場合、dendrogram は、ClusterIndices のクラスター割り当てを生成するためにツリーが切り分けられる位置を示す破線をプロットします。ColorThresholdShowCut=true を指定して ClusterIndices を指定しなかった場合、dendrogramColorThreshold の値の位置に破線をプロットします。

例: ShowCut=true

データ型: logical

R2024b 以降

葉ノード マーカーを表示するかどうかのインジケーター。数値または logical の 0 (false) または 1 (true) として指定します。ShowMarkers=true を指定した場合、dendrogram は各葉ノードに塗りつぶされていない黒い円のマーカーをプロットします。さらに ClusterIndices を指定した場合、その葉のすべての行が同じクラスター内にあるときは、円のマーカーは塗りつぶされ、クラスター割り当てに従って色付けされます。葉ノード マーカーの上にカーソルを移動すると、その葉のツリー行番号 (および指定した場合はクラスター割り当て) を含むデータ ヒントが表示されます。データ ヒントには、1 つの葉について最大 3 つの行番号と 3 つのクラスター割り当てが表示されます。

例: ShowMarkers=true

データ型: logical

デンドログラムの向き。次のいずれかの値として指定します。

"top"上から下
"bottom"下から上
"left"左から右
"right"右から左

葉ノードが水平方向に配置される縦型のデンドログラムの場合は、"top" または "bottom" を指定します。

葉ノードが垂直方向に配置される横型のデンドログラムの場合は、"left" または "right" を指定します。

元のデータ セットにおける各データ点のラベル。文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。dendrogram は、単一のデータ点が含まれているデンドログラム プロット内の葉に、そのデータ点のラベルを付けます。

親コンテナー。Figure オブジェクトまたは Panel オブジェクトを指定します。これらのオブジェクト プロパティの詳細については、FigureおよびPanelを参照してください。

出力引数

すべて折りたたむ

デンドログラム プロットのライン。Line オブジェクトのベクトルとして返されます。

元のデータ セットにある各データ点の葉ノードの数であり、M の列ベクトルとして長さが返されます。ここで M は元のデータ セットのデータ点の数です。

元のデータセットにあるデータ点の数が P に満たない場合 (P の既定値は 30 です)、デンドログラムにすべてのデータ点が表示され、各ノードに単一のデータ点が含まれます。その場合、T は恒等写像 T = (1:M)' になります。

T は、P がデータ点の総数より少ない場合、つまり、デンドログラムに表示された一部の葉ノードが複数のデータ点に対応する場合に便利です。たとえば、デンドログラム プロットの葉ノード k にどのデータ点が含まれているかを確認するには、find(T==k) を使用します。

デンドログラムのプロットに表示された葉ノードのラベルの順列。行ベクトルとして返されます。outperm は、縦型のデンドログラムでは左から右、横型のデンドログラムでは下から上の順序を指定します。デンドログラム プロットに P 個の葉がある場合、outperm はベクトル 1:P の順列になります。

バージョン履歴

R2006a より前に導入

すべて展開する