?? som_clplot.m
字號:
function h = som_clplot(sC,varargin)%SOM_CLPLOT Visualize clustering.% % h = som_clplot(sC, [[argID,] value, ...])% som_clplot(sM, part)% % som_clplot(sC);% som_clplot(som_clstruct(Z))% som_clplot(sC,sM);% som_clplot(sC,'coord',P);% som_clplot(sC,'dendrogram',[1 1 1 1 0 0 1 1 0 0 1]);% som_clplot(sC,'linewidth',10);% som_clplot(sC,'size',10);% som_clplot(sM,part);% % Input and output arguments ([]'s are optional): % sC (struct) clustering struct, as produced by SOM_CLSTRUCT% [argID, (string) See below. Each pair is the fieldname and % value] (varies) the value to be given to that field.% sM (struct) map struct% part (vector) length = munits, partitioning for the map%% h (vector) handles to the arcs between % % Here are the valid argument IDs and corresponding values. The values % which are unambiguous (marked with '*') can be given without the% preceeding argID.% 'linecolor' (string) color of the arc lines, 'k' by default% (vector) size 1 x 3% 'linewidth' (scalar) width of the arc lines% 'size' (vector) length 2*clen-1, sizes for each of the % cluster markers% (scalar) this size is used for all cluster markers% 'dendrogram'(vector) size 2*clen-1, indicates which clusters % are shown in the dendrogram% *(string) 'on' or 'off' ('on' by default)% 'coord' (matrix) size dlen x odim, the coordinates% for the data. If odim<=2, these are used as is.% Otherwise a 2-dimensional PCA-projection is% first made (see function PCAPROJ). These% coordinates are applied also to the clusters.% *(struct) data struct: as above% map or topology struct: the coordinates given % by SOM_VIS_COORDS are used for the data % 'color' (matrix) size dlen x 3, color for each data. By% default the colors defined for base % clusters are used (sC.color(sC.base,:)).% For ignored data figure background color is used. % (vector) size dlen x 1, indexed colors are used%% See also SOM_CLSTRUCT, SOM_LINKAGE, SOM_CLPRUNE, LINKAGE, DENDROGRAM.% Copyright (c) 2000 by Juha Vesanto% Contributed to SOM Toolbox on XXX by Juha Vesanto% http://www.cis.hut.fi/projects/somtoolbox/ % Version 2.0beta juuso 180600%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% read the arguments% sCif strcmp(sC.type,'som_map'), base = varargin{1}; clen = length(unique(base(isfinite(base)))); Z = ones(clen-1,3); Z(:,1) = randperm(clen-1)'; Z(:,2) = [clen:2*clen-2]'; Z(:,3) = [1:clen-1]'; sT = sC; sC = som_clstruct(Z,'base',varargin{1}); h = som_clplot(sC,'coord',sT,'dendrogram','off',varargin{2:end}); return; endclen = size(sC.tree,1)+1; % vararginshow = 'on'; markersize = 10; linecolor = 'k'; linewidth = 1; datacoord = []; datacolor = []; i=1; while i<=length(varargin), argok = 1; if ischar(varargin{i}), switch varargin{i}, case 'dendrogram', i=i+1; show = varargin{i}; case 'size', i=i+1; markersize = varargin{i}; case 'linecolor', i=i+1; linecolor = varargin{i}; case 'linewidth', i=i+1; linewidth = varargin{i}; case 'color', i=i+1; datacolor = varargin{i}; case 'coord', i=i+1; datacoord = varargin{i}; case {'on','off'}, show = varargin{i}; otherwise argok=0; end elseif isstruct(varargin{i}), datacoord = varargin{i}; else argok = 0; end if ~argok, disp(['(som_clplot) Ignoring invalid argument #' num2str(i+1)]); end i=i+1;end% markersizeif length(markersize)==1, markersize = ones(2*clen-1,1)*markersize; end% datacoordif ~isempty(datacoord), if isstruct(datacoord), switch datacoord.type, case 'som_map', datacoord = datacoord.topol; case 'som_topol', %nil case 'som_data', datacoord = datacoord.data; otherwise, datacoord = []; end end if isstruct(datacoord), sC = som_clstruct(sC,'coord',som_vis_coords(datacoord.lattice,datacoord.msize)); else [dlen dim] = size(datacoord); if dim>2, datacoord = pcaproj(datacoord,2); end sC = som_clstruct(sC,'coord',datacoord); endend% showif ischar(show), show = strcmp(show,'on'); endif prod(size(show)) == 1, show = ones(2*clen-1,1)*show; end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% initialize values% find the children to show for each clustersTree0 = struct('parent',0,'children',[]); sTree = sTree0; for i=2:(2*clen-1), sTree(i) = sTree0; endfor i=(clen+1):(2*clen-1), if isfinite(sC.tree(i-clen,3)), ch = sC.tree(i-clen,1:2); sTree(i).children = ch; for j=1:length(ch), sTree(ch(j)).parent = i; end end endif any(show==0), % some clusters are not shown for i=(clen+1):(2*clen-1), if ~show(i), p = sTree(i).parent; ch = sTree(i).children; if p, j = find(sTree(p).children == i); sTree(p).children = [sTree(p).children([1:(j-1),(j+1):end]), ch]; for j=1:length(ch), sTree(ch(j)).parent = p; end end end end end% the arcslfrom = []; lto = []; ladd = [];for i=(clen+1):(2*clen-1), if show(i), ch = sTree(i).children'; %ch = ch(find(show(ch)==1)); lfrom = [lfrom; i*ones(length(ch),1)]; lto = [lto; ch]; endend% infinite height%isinf = ~isfinite(sC.height); %sC.height(isinf) = 2*max(sC.height(~isinf)); % the coordinates of the arcsCo = [sC.coord, sC.height];if size(Co,2)==2, Lx = [Co(lfrom,1), Co(lto,1), Co(lto,1)]; Ly = [Co(lfrom,end), Co(lfrom,end), Co(lto,end)]; Lz = []; else Lx = [Co(lfrom,1), Co(lto,1), Co(lto,1)]; Ly = [Co(lfrom,2), Co(lto,2), Co(lto,2)]; Lz = [Co(lfrom,end), Co(lfrom,end), Co(lto,end)];end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plotwashold = ishold; if ~washold, cla; hold on; end% plot dataif ~isempty(datacoord), if isempty(datacolor), nancolor = get(gcf,'Color'); Col = nancolor(ones(length(sC.base),1),:); ind = find(isfinite(sC.base)); Col(ind,:) = sC.color(sC.base(ind),:); elseif size(datacolor,2)==1, Col = som_normcolor(datacolor,jet); else Col = datacolor; end if isstruct(datacoord), som_cplane(datacoord,Col); else som_grid('rect',[length(sC.base) 1],'line','none',... 'Coord',datacoord,'Markercolor',Col); endendh = []; if any(show), % plot the lines if isempty(Lz), h = line(Lx',Ly','color',linecolor,'linewidth',linewidth); else h = line(Lx',Ly',Lz','color',linecolor,'linewidth',linewidth); if ~washold, view(3); end rotate3d on end % plot the nodes inds = find(show); som_grid('rect',[length(inds) 1],'line','none',... 'Coord',Co(inds,:),... 'Markercolor',sC.color(inds,:),... 'Markersize',markersize(inds));endif ~washold, hold off, endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -