根据答案
Unable to create an array from a table,
Coloring The Dots in biPlot Chart我写了下面的代码。
如何更改图例以显示clusters = Tb.class
(虹膜种类),如何凸包每个组?
代码:
clc;
clear;
close all;
Tb = webread('https://datahub.io/machine-learning/iris/r/iris.csv');
clusters = Tb.class;
X = [Tb.sepallength Tb.sepalwidth Tb.petallength Tb.petalwidth ];
Z = zscore(X); % Standardized data
[coefs,score] = pca(Z);
vbls = {'sepallength','sepalwidth','petallength','petalwidth'};
h=biplot(coefs(:,1:2),'Scores',score(:,1:2),'VarLabels',vbls);
hID = get(h, 'tag');
% Isolate handles to scatter points
hPt = h(strcmp(hID,'obsmarker'));
% Identify cluster groups
grp = findgroups(clusters); %r2015b or later - leave comment if you need an alternative
grp(isnan(grp)) = max(grp(~isnan(grp)))+1;
grpID = 1:max(grp);
% assign colors and legend display name
clrMap = lines(length(unique(grp))); % using 'lines' colormap
for i = 1:max(grp)
set(hPt(grp==i), 'Color', clrMap(i,:), 'DisplayName', sprintf('Cluster %d', grpID(i)))
end
% add legend to identify cluster
[~, unqIdx] = unique(grp);
legend(hPt(unqIdx))
答案 0 :(得分:0)
1)对于传奇,您可以按如下方式简单地使用群集名称:
$("body").mousemove(function(e) {
console.log('position of ghost image: ' + e.pageX + ', ' + e.pageY;
})
2)对于凸包部分,您可以使用2D正态分布的unqClusters = unique(clusters);
for i = 1:max(grp)
% Original legend showing "Cluster n"
%set(hPt(grp==i), 'Color', clrMap(i,:), 'DisplayName', sprintf('Cluster %d', grpID(i)))
% New legend showing the flower class name
set(hPt(grp==i), 'Color', clrMap(i,:), 'DisplayName', sprintf('%s', unqClusters{i}))
end
。
这是一个适用于前两个原始PC得分的代码,您需要适应contour
函数执行的标准化。
代码实际上遍历每个群集,计算前两个PC值的均值和协方差,并将这些值用作2D正态分布的参数,其2D正态分布的PDF是在网格上计算的。最后,选择一个选定的2D PDF级别值进行绘图,这将导致一个椭圆形覆盖簇中的大多数点。
bitplot