⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 som_clplot.m

📁 it is matlab code , som(slef organizing map) tool for matlab
💻 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 + -