Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_plotplane.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_plotplane.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,285 @@ +function h=som_plotplane(varargin) + +%SOM_PLOTPLANE Visualize the map prototype vectors as line graphs +% +% h=som_plotplane(lattice, msize, data, [color], [scaling], [pos]) +% h=som_plotplane(topol, data, [color], [scaling], [pos]) +% +% som_plotplane('hexa',[5 5], rand(25,4), jet(25)) +% som_plotplane(sM, sM.codebook) +% +% Input and output arguments ([]'s are optional) +% lattice (string) grid 'hexa' or 'rect' +% msize (vector) size 1x2, defines the grid size +% (matrix) size Mx2, defines explicit coordinates: in +% this case the first argument does not matter +% topol (struct) map or topology struct +% data (matrix) Mxd matrix, M=prod(msize) +% [color] (matrix) size Mx3, gives an individual color for each graph +% (string) ColorSpec gives the same color for each +% graph, default is 'k' (black) +% [scaling] (string) 'on' or 'off', default is 'on' +% [pos] (vector) 1x2 vector that determines translation. +% Default is no translation. +% +% h (vector) the object handles for the LINE objects +% +% If scaling is set on, the data will be linearly scaled in each +% unit so that min and max values span from lower to upper edge +% in each unit. If scaling is 'off', the proper scaling is left to +% the user: values in range [-.5,.5] will be plotted within the limits of the +% unit while values exceeding this range will be out of the unit. +% Axis are set as in SOM_CPLANE. +% +% For more help, try 'type som_plotplane' or check out online documentation. +% See also SOM_PLANE, SOM_PIEPLANE, SOM_BARPLANE + +%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% som_plotplane +% +% PURPOSE +% +% Visualizes the map prototype vectors as line graph +% +% SYNTAX +% +% h = som_plotplane(topol, data) +% h = som_plotplane(lattice, msize, data) +% h = som_plotplane(..., color) +% h = som_plotplane(..., color, scaling) +% h = som_plotplane(..., color, scaling, pos) +% +% DESCRIPTION +% +% Visualizes the map prototype vectors as line graph +% +% KNOWN BUGS +% +% It is not possible to specify explicit coordinates for map +% consistig of just one unit as then the msize is interpreted as +% map size. +% +% FEATURES +% +% - the colors are fixed: changing colormap in the figure (see +% COLORMAP) will not affect the coloring of the plots +% +% REQUIRED INPUT ARGUMENTS +% +% lattice The basic topology +% +% (string) 'hexa' or 'rect' positions the plots according to hexagonal or +% rectangular map lattice. +% +% msize The size of the map grid +% +% (vector) [n1 n2] vector defines the map size (height n1 units, width n2 +% units, total M=n1 x n2 units). The units will be placed to their +% topological locations in order to form a uniform hexagonal or +% rectangular grid. +% (matrix) Mx2 matrix defines arbitary coordinates for the M units. +% In this case the argument 'lattice' has no effect. +% +% topol Topology of the map grid +% +% (struct) map or topology struct from which the topology is taken +% +% data The data to be visualized +% +% (matrix) Mxd matrix of data vectors. +% +% OPTIONAL INPUT ARGUMENTS +% +% If unspecified or given empty values ('' or []), default values +% will be used for optional input arguments. +% +% color The color of the plots +% +% (string) Matlab's ColorSpec (see help plot) string gives the same color +% for each line. +% +% (matrix) Mx3 matrix assigns an RGB color determined by the Nth row of +% the matrix to the Nth plot. +% +% (vector) 1x3 RGB vector gives the same color for each line. +% +% scaling The data scaling mode +% +% (string) 'on or 'off': if scaling is set on, the data will be +% linearly scaled in each unit so that min and max values span from +% lower to upper edge in each unit. If scaling is 'off', the proper +% scaling is left to the user: values in range [-.5,.5] will be plotted +% within the limits of the unit while values exceeding this +% range will be out of the unit. +% +% pos Position of the origin +% +% (vector) This is meant for drawing the plane in arbitary location in a +% figure. Note the operation: if this argument is given, the +% axis limits setting part in the routine is skipped and the limits +% setting will be left to be done by MATLAB's +% defaults. By default no translation is done. +% +% OUTPUT ARGUMENTS +% +% h (scalar) Handle to the created patch object +% +% OBJECT TAG +% +% Object property 'Tag' is set to 'planePlot'. +% +% EXAMPLES +% +% %%% Create the data and make a map +% +% data=rand(1000,20); map=som_make(data); +% +% %%% Create a 'gray' colormap that has 64 levels +% +% color_map=gray(64); +% +% %%% Draw plots using red color +% +% som_plotplane(map, map.codebook,'r'); +% +% %%% Calculate hits on the map and calculate colors so that +% black = min. number of hits and white = max. number of hits +% +% hit=som_hits(map,data); color=som_normcolor(hit(:),color_map); +% +% %%% Draw plots again. Now the gray level indicates the number of hits to +% each node +% +% som_plotplane(map, map.codebook, color); +% +% SEE ALSO +% +% som_cplane Visualize a 2D component plane, u-matrix or color plane +% som_barplane Visualize the map prototype vectors as bar diagrams. +% som_pieplane Visualize the map prototype vectors as pie charts + +% Copyright (c) 1999-2000 by the SOM toolbox programming team. +% http://www.cis.hut.fi/projects/somtoolbox/ + +% Version 2.0beta Johan 160799 juuso 151199 070600 + +%%% Init & Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[nargin, lattice, msize, data, color, scaling, pos] = vis_planeGetArgs(varargin{:}); +error(nargchk(3, 5, nargin)); % check no. of input args is correct + +s=0.8; % size of plot + +if nargin < 6 | isempty(pos) + pos=NaN; +end + +if nargin < 5 | isempty(scaling) + scaling='on'; +elseif ~vis_valuetype(scaling,{'string'}) | ... + ~any(strcmp(scaling,{'on','off'})), + error('Scaling should be string ''on'' or ''off''.'); +end + +l=size(data,2); + +if ~isnumeric(msize) | ndims(msize) ~= 2 | size(msize,2)~=2, + error('msize has to be 1x2 grid size vector or a Nx2 coordinate matrix.'); +elseif size(msize,1) == 1, + xdim=msize(2); + ydim=msize(1); + N=xdim*ydim; + y=repmat(repmat([1:ydim]',xdim,1),1,l); + x=reshape(repmat([1:xdim],ydim*l,1),l,N)'; +else + x=repmat(msize(:,1),1,l);y=repmat(msize(:,2),1,l); + N=size(msize,1); + lattice='rect'; + if isnan(pos), + pos=[0 0]; + end +end + +switch lattice +case {'hexa', 'rect'} + ; +otherwise + error(['Lattice' lattice ' not implemented!']); +end + +if ~isnumeric(data) | size(data,1) ~= N + error('Data matrix is invalid or has wrong size!'); +end + +if nargin < 4 | isempty(color), + color='k'; +elseif vis_valuetype(color, {'colorstyle',[N 3]}), + if ischar(color) & strcmp(color,'none'), + error('Colorstyle ''none'' not allowed in som_plotplane.'); + end +elseif vis_valuetype(color,{'1x3rgb'}) + ; +elseif ~vis_valuetype(color,{'nx3rgb',[N 3]},'all'), + error('The color matrix has wrong size or contains invalid RGB values or colorstyle.'); +end + +[linesx, linesy]=vis_line(data,scaling); + +%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Making the lattice. +% Command view([0 90]) shows the map in 2D properly oriented + +switch lattice +case 'hexa' + t=find(rem(y(:,1),2)); % move even rows by .5 + x(t,:)=x(t,:)-.5; + x=(x./s+linesx).*s+.5; y=(y./s+linesy).*s; % scale with s +case 'rect' + x=(x./s+linesx).*s; y=(y./s+linesy).*s; % scale with s +end + +%% Draw the map! ... + +h_=plot(x',y'); + +if size(color,1) == 1 + set(h_,'Color',color); +else + for i=1:N, + set(h_(i,:),'Color',color(i,:)); + end +end + +if ~isnan(pos) + x=x+pos(1);y=y+pos(2); % move upper left corner +end % to pos(1),pos(2) + +%% Set axes properties + +ax=gca; +vis_PlaneAxisProperties(ax, lattice, msize, pos); + +%%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +set(h_,'Tag','planePlot'); % tag the lineobject + +if nargout>0, h=h_; end % Set h only, + % if there really is output + +%% Subfuntion %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function [x,y]=vis_line(data, scaling) + +s=size(data); +% normalization between [0,1] if scaling is on +if strcmp(scaling,'on') + mn=repmat(min(data,[],2),1,s(2)); + mx=repmat(max(data,[],2),1,s(2)); + y=-((data-mn)./(mx-mn))+.5; +else % -sign is beacuse we do axis ij + y=-data; +end + +x=repmat(linspace(-.5, .5, size(data,2)), size(data,1),1);