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

📄 clusterhull.m

📁 一个经典的ICA算法的程序包
💻 M
字号:
function [h_marker,txtcoord]=clusterhull(mode,coord,partition,color)%function [h_marker,txtcoord]=clusterhull(mode,coord,partition,[color])%%PURPOSE%%To draw a cluster visualization where the objects (represented by%points) belonging to the same cluster are presented by "cluster hulls",%polygons where the edge of the polygon is the convex hull of the%points that belong to the same cluster.%%INPUT%%%[An argument in brackets is optional. If it isn't  given or it's% an empty matrix/string, the function will use a default value.] %%mode      (string) 'edge' | 'fill'%coord     (Mx2 matrix) coordinates of points (objects)%partition (Mx1 vector) partition vector of objects (see%            explanation for 'partition vector' in function hcluster)     %[color]   (Kx3 matrix) each line is a 1x3 RGB vector that defines%           color for each cluster. Default color is red for all %           clusters color(i,:)=[NaN NaN NaN] means that cluster(i)%           is not drawn at all.%%OUTPUT%% h_marker (vector) graphic handles to all clusters. h_marker(i)=NaN if%           color(i,:)=[NaN NaN NaN]% txtcoord (Kx2 matrix) suggested coordinates for text labels.%            txtcoord(i,:)=[NaN NaN] if cluster i is not drawn. %            Meaningful only in mode 'edge', returns always a%            matrix of NaNs in mode 'fill'.%%DETAILS%%In mode 'edge' each cluster is represented by a convex hull if%there are more than two points in the cluster. A two point cluster is%represented by a line segment and a one point cluster by a small%cross. The face of the convex hull is invisible.   %%In mode 'fill' the cluster hulls are filled with the specified%color. Clusters having less than three members are ignored.%%NOTE The function always adds to a plot (turns 'hold on' temporarily).%%USED IN%  icassoGraph%COPYRIGHT NOTICE%This function is a part of Icasso software library%Copyright (C) 2003-2005 Johan Himberg%%This program is free software; you can redistribute it and/or%modify it under the terms of the GNU General Public License%as published by the Free Software Foundation; either version 2%of the License, or any later version.%%This program is distributed in the hope that it will be useful,%but WITHOUT ANY WARRANTY; without even the implied warranty of%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the%GNU General Public License for more details.%%You should have received a copy of the GNU General Public License%along with this program; if not, write to the Free Software%Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.% ver 1.2 100105 johanholdStat=ishold;hold on;Ncluster=max(partition);if nargin<4|isempty(color),  color=repmat([1 0 0],Ncluster,1);endswitch mode case 'edge'  [h_marker,txtcoord]=clusteredge(coord,partition,color); case 'fill'  h_marker=clusterfill(coord,partition,color);  txtcoord=repmat(NaN,Ncluster,1); otherwise  error('Unknown operation mode.');end% Some graphic settingsset(gca,'xtick',[],'ytick',[]); axis equal;if ~holdStat,  hold off;endfunction [h_marker,txtcoord]=clusteredge(coord,partition,color);%% Number of clustersNcluster=max(partition);%% Line width and +-sign sizeLINEWIDTH=2;MARKERSIZE=6;for cluster=1:Ncluster,  hullCoord=[];  index=partition==cluster; Npoints=sum(index);   coord_=coord(index,:);   isVisible=all(isfinite(color(cluster,:)));  if isVisible,    if Npoints>=3,      I=convhull(coord_(:,1),coord_(:,2));       hullCoord=enlargehull([coord_(I,1) coord_(I,2)]);      h_marker(cluster,1)=patch(hullCoord(:,1),hullCoord(:,2),0);      set(h_marker(cluster,1),'edgecolor',color(cluster,:),'facecolor','none', ...			'linewidth',LINEWIDTH);    elseif size(coord_,1)==2,      hullCoord(:,1)=[coord_(1,1) coord_(2,1)]'; hullCoord(:,2)=[coord_(1,2) coord_(2,2)]';      h_marker(cluster,1)=plot(hullCoord(:,1)',hullCoord(:,2)','-');      set(h_marker(cluster,1),'color',color(cluster,:),'linewidth',LINEWIDTH);    else      hullCoord(:,1)=coord_(1,1); hullCoord(:,2)=coord_(1,2);      h_marker(cluster,1)=plot(coord_(1,1),coord_(1,2),'+');      set(h_marker(cluster),'color',color(cluster,:),'markersize',MARKERSIZE);  end  txtcoord(cluster,:)=gettextcoord(hullCoord);  else    txtcoord(cluster,1:2)=NaN; h_marker(cluster,1)=NaN;  endendfunction h_marker=clusterfill(coord,partition,color)Ncluster=max(partition);k=0;for cluster=1:Ncluster,  hullCoord=[];  index=cluster==partition; Npoints=sum(index);   coord_=coord(index,:);   isVisible=all(isfinite(color(cluster,:)));  if Npoints>=3 & isVisible,    I=convhull(coord_(:,1),coord_(:,2));     hullCoord=enlargehull([coord_(I,1) coord_(I,2)]);    h_marker(cluster,1)=patch(hullCoord(:,1),hullCoord(:,2),0);    set(h_marker(cluster),'edgecolor','none','facecolor',color(cluster,:));  else    h_marker(cluster,1)=NaN;  endendfunction c=gettextcoord(coord)[tmp,i]=min(coord(:,1));c=coord(i,:);function coord=enlargehull(coord)S=1.1;m=repmat(mean(coord(1:end-1,:),1),size(coord,1),1);coord_=coord-m;coord_=coord_.*S;coord=coord_+m;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -