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

조회 수: 28(최근 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개)

Community Treasure Hunt

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

Start Hunting!