バイプロットで表示し​たデータの色分けを行​う方法(biplot​,pca)

8 ビュー (過去 30 日間)
徹也 長島
徹也 長島 2022 年 11 月 11 日
コメント済み: 徹也 長島 2022 年 12 月 23 日
Matlab初心者です。
現在、データのクラスタリングを行い、得られた結果をPCAとバイプロットを用いて図示しようと悪戦苦闘しております。
下記の図にあるように,現在のコードでは全てのデータが赤色になってしまっています。
データをクラスターごとに色分けし,表示する方法がわかりません。
どうか知恵をお貸しいただけますでしょうか。
よろしくお願いいたします。
D=readmatrix("Test.xlsx");
[coeff,score,latent]=pca(D)
[idx,H,sumd]=kmeans(D,3,MaxIter=1000,Display="final",Replicates=5)
vbls = {'Depth','Sample','Ping','sea bottom mean','Length','Height','Perimeter','Area','BAmean','TAmean','Elongation','UNEVENNESS1','UNEVENNESS"','Lectangularity','Fractual demensiton','Circularity'};
figure
biplot(coeff(:,1:3),'scores',score(:,1:3),"VarLabels",vbls)

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 11 月 11 日
編集済み: Atsushi Ueno 2022 年 11 月 11 日
  • 今回の添付データの場合、biplot関数の出力(グラフィックオブジェクト)は下記の様になります。
% h には 1013 個のオブジェクト ハンドルが含まれています
% ・ハンドル h( 1:16) は、16変数の line ハンドルに対応します
% ・ハンドル h(17:32) は、16変数のマーカー ハンドルに対応します
% ・ハンドル h(33:48) は、16変数のテキスト ハンドルに対応します
% ・ハンドル h(49:1012) は、観測値の line ハンドルに対応します
% ・ハンドル h(1013) は、座標軸の line ハンドルに対応します
  • kmeans関数の出力する「クラスター インデックス (idx)」を色付けのネタとして用いましたが、この値(今回の場合1~3)が実行の度に入れ替わってしまう難点があります。
D=readmatrix("Test.xlsx");
[coeff,score,latent]=pca(D);
[idx,H,sumd]=kmeans(D,3,MaxIter=1000,Display="final",Replicates=5);
Replicate 1, 19 iterations, total sum of distances = 10015.7. Replicate 2, 21 iterations, total sum of distances = 10017.1. Replicate 3, 20 iterations, total sum of distances = 10017.1. Replicate 4, 10 iterations, total sum of distances = 10014.8. Replicate 5, 11 iterations, total sum of distances = 10017.1. Best total sum of distances = 10014.8
vbls = {'Depth','Sample','Ping','sea bottom mean','Length','Height','Perimeter','Area','BAmean','TAmean','Elongation','UNEVENNESS1','UNEVENNESS"','Lectangularity','Fractual demensiton','Circularity'};
figure
h = biplot(coeff(:,1:3),'scores',score(:,1:3),"VarLabels",vbls); % 出力hを追記
% ここから下を追加
xlim([-0.1 0.5]); ylim([-0.1 0.5]); zlim([-0.5 0.3]); % 適当に範囲を調整
color = 'rgb'; % 適当な3色を作成
for k = 1:size(D,1)
h(k + size(D,2)*3).MarkerEdgeColor = color(idx(k)); % 各データを赤一色から赤緑青に変更
end
  1 件のコメント
徹也 長島
徹也 長島 2022 年 12 月 23 日
ありがとうございます。参考にさせていただきます!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange次元削減と特徴抽出 についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!