diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show.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_show.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,815 @@
+function h=som_show(sMap, varargin)
+
+% SOM_SHOW Basic SOM visualizations: component planes, u-matrix etc.
+%
+% h = som_show(sMap, ['argID', value, ...])
+% 
+%  som_show(sMap);
+%  som_show(sMap,'bar','none');
+%  som_show(sMap,'comp',[1:3],'umat','all');
+%  som_show(sMap,'comp',[1 2],'umat',{[1 2],'1,2 only'},'comp',[3:6]);   
+%  som_show(sMap,'size',m,'bar','vert','edge','off');
+%
+% Input and output arguments ([]'s are optional):
+%  sMap        (struct) map struct
+%  [argID,     (string) Additional parameters are given as argID, value
+%    value]    (varies) pairs. See below for list of valid IDs and values.
+%
+%  h           (struct) struct with the following fields:
+%   .plane     (vector) handles to the axes objecets (subplots)
+%   .colorbar  (vector) handles to the colorbars. Colorbars for empty
+%                       grids & RGB color planes do not exist: the
+%                       value for them in the vector is -1.
+%   .label     (vector) handles to the axis labels
+%
+% Here are the valid argument IDs and corresponding values. M is
+% the number of map units
+%  'comp'               Which component planes to draw, title is
+%                       the name of the component (from sMap.comp_names) 
+%              (vector) a vector of component indices
+%              (string) 'all' (or '' or []) for all components
+%  'compi'              as 'comp' but uses interpolated shading
+%  'umat'               Show u-matrix calculated using specified 
+%                       components 
+%              (vector) a vector of component indeces
+%              (string) 'all' (or '' or []) to use all components
+%              (cell)   of form {v, str} uses v as the vector, and put
+%                       str as title instead of the default 'U-matrix'
+%  'umati'              as 'umat' but uses interpolated shading of colors 
+%  'empty'     (string) Make an empty plane using given string as title
+%  'color'              Set arbitrary unit colors explicitly  
+%              (matrix) size Mx1 or Mx3, Mx1 matrix uses indexed
+%                       coloring;  Mx3 matrix (RGB triples as rows)
+%                       defines fixed unit colors
+%              (cell)   of from {color, str}. 'color' is the Mx1
+%                       or Mx3 RGB triple matrix and 'str' is title 
+%                       string
+%  'colori'             as 'color' but uses interpolated shading of colors 
+%  'norm'      (string) 'n' or 'd': Whether to show normalized 'n' or 
+%                       denormalized 'd' data values on the
+%                       colorbar. By default denormalized values are used.
+%  'bar'       (string) Colorbar direction: 'horiz', 'vert' (default)
+%                       or 'none'
+%  'size'               size of the units
+%              (scalar) same size for each unit, default is 1
+%              (vector) size Mx1, individual size for each unit
+%  'edge'      (string) Unit edges on component planes 'on'
+%                       (default) or 'off'
+%  'footnote'  (string) Footnote string, sMap.name by default
+%  'colormap'  (matrix) user defined colormap 
+%  'subplots'  (vector) size 1 x 2, the number of subplots in y- and
+%                       and x-directions (as in SUBPLOT command)
+%
+% If identifiers 'comp', 'compi', 'umat', 'umati', 'color', 'colori'
+% or 'empty' are not specified at all, e.g. som_show(sMap) or
+% som_show(sMap,'bar','none'), the U-matrix and all component planes
+% are shown.
+%
+% For more help, try 'type som_show' or check out online documentation. 
+% See also SOM_SHOW_ADD, SOM_SHOW_CLEAR, SOM_UMAT, SOM_CPLANE, SOM_GRID.
+
+%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_show
+%
+% PURPOSE 
+%
+% Shows basic visualizations of SOM: component planes, unified distance
+% matrices as well as empty planes and fixed color planes.
+%
+% SYNTAX
+%
+%  h = som_show(sMap)
+%  h = som_show(sMap, 'argID', value, ...)
+%
+% DESCRIPTION 
+%
+% This function is used for basic visualization of the SOM. Four
+% kinds of SOM planes can be shown: 
+%
+%  1. U-matrix (see SOM_UMAT) which shows clustering structure of
+%     the SOM. Either all or just part of the components can 
+%     be used in calculating the U-matrix.
+%  2. component planes: each component plane shows the values of
+%     one variable in each map unit
+%  3. an empty plane which may be used as a base for, e.g., hit 
+%     histogram visualization or labeling (see SOM_SHOW_ADD)
+%  4. a fixed or indexed color representation for showing color coding or 
+%     clustering
+%
+% The component planes and u-matrices may have colorbars showing the
+% scale for the variable. The scale shows by default the values that
+% variables have in the map struct. It may be changed to show the
+% original data values (estimated by SOM_DENORMALIZE). In this case a
+% small 'd' appears below the colorbar. The orientation of these
+% colorbars may be changed, or they can be removed.
+%
+% By default the u-matrix - calculated using all variables - and all
+% component planes are shown. This is achieved by giving command
+% som_show(sMap) without any further arguments
+%
+% REQUIRED INPUT ARGUMENTS
+%
+% sMap  (struct) Map to be shown. If only this argument is
+%                specified, the function draws first the u-matrix 
+%                calculated using all the variables followed by all
+%                the component planes.
+%
+% OPTIONAL INPUT ARGUMENTS
+% 
+% (M is the number of map units)
+%
+% Optional arguments must be given as 'argID',value -pairs
+% 
+% 'comp'      Defines the variabels to be shown as component planes.
+%    (vector) 1xN or Nx1 vector with integer positive numbers ranging 
+%             from 1 to the number of variables in the map codebook
+%             (dim). This vector determines the variables to be show
+%             as component planes and their order. Note that the same
+%             component plane (the same variable index) is allowed to
+%             occur several times.
+%    (string) 'all' or '' or []. This uses all variables, that is, it's
+%             the same that using value [1:dim] where dim is the
+%             number of variables in the codebook.
+%       
+% 'compi'     Same as 'comp' but uses a Gouraud shaded color plane 
+%             (made using SOM_GRID function) instead of the cell-like
+%             visualization of 'comp' (made using SOM_CPLANE). Note
+%             that the color interpolation doesn't work strictly
+%             correctly on 'hexa' grid, as it uses rectangular grid
+%             (see SURF).
+% 
+% 'umat'      Show U-matrix: value defines the variables to be used
+%             for calculating a u-matrix.
+%    (vector) as in 'comps'. However, multiple occurences of the
+%             same variable (same variable index) are ignored. 
+%    (string) 'all' or '' or []. This uses all variables, that is, 
+%             is the same as using value [1:dim] where dim is the
+%             number of variables in the codebook. 
+%    (cell)   of form {v, str} where v is a valid index vector for 'umat' 
+%             (see above) and str is a string that is used as a title 
+%             for the u-matrix instead of the default title
+%             'U-matrix'. This may be useful if several u-matrices
+%             are shown in the same figure. 
+% 
+% 'umati'     Same as 'umat' but uses shaded color plane (see 'compi').
+%
+% 'empty'     Show an empty plane (patch edges only)
+%    (string) value is used as title
+% 
+% 'color'     Define fixed RGB colors for the map units
+%    (matrix) a Mx3 matrix of RGB triples as rows             
+%    (vector) a Mx1 vector of any values: sets indexed coloring using
+%             the current colormap (as SURF does)  
+%    (matrix) a Mx3xN matrix of RGB triples as rows. This gives N
+%             color planes.
+%    (matrix) a Mx1xN matrix of any values: sets indexed coloring using
+%             the current colormap (as SURF does). This gives N
+%             color planes.
+%    (cell)   of form {rgb, str} where rgb is a Mx3 (xN) matrix of RGB
+%             triples as rows and str is a string that is used as
+%             title(s).  
+%    (cell)   of form {v, str} where v is a Mx1(xN) matrix of values
+%             and str is a string that is used as title(s). 
+%
+% 'colori'    Same as 'color' but uses shaded color plane (see 'compi').
+%
+% 'norm'      Defines whether to use normalized or denormalized
+%             values in the colorbar. If denormalized values are
+%             used, they are acquired from SOM_DENORMALIZE function 
+%             using sMap.comp_norm field.
+%    (string) 'd' (default) for denormalized values and 'n' for
+%             normalized values. The corresponding letter appears
+%             below the colorbar.
+%   
+% 'bar'       Define the direction of the colorbars for component planes 
+%             and U-matrices or turn them completely off.
+%    (string) 'vert' (default), 'horiz' or 'none'. 'vert' gives
+%             vertical and 'horiz' horizontal colorbars. 'none'
+%             shows no colorbars at all. 
+%
+% 'size'      Define sizes of the units. 
+%    (scalar) all units have the same size (1 by default)
+%    (vector) size Mx1, each unit gets individual size scaling 
+%             (as in SOM_CPLANE)
+%
+% 'edge'      Unit edges on component plane visualizations.
+%    (string) 'on' or 'off' determines whether the unit edges on component 
+%             planes ('comp') are shown or not. Default is 'off'. Note that
+%             U-matrix and color planes are _always_ drawn without edges.
+%
+% 'footnote'  Text on the figure
+%    (string) is printed as a movable text object on the figure
+%             where it may be moved using mouse. Default value is the
+%             string in the sMap.name field. Note: value [] gives the
+%             string, but input value '' gives no footnote a all. 
+%             See VIS_FOOTNOTE for more information on the text object 
+%             and ways to change its font size.
+% 
+% 'colormap'  som_show ghages the colormap by default to a gray-level map
+%    (matrix) This argument is used to set some other colormap. 
+%
+% 'subplots'  the number of subplots in y- and x-directions, as in 
+%    (vector) command SUBPLOT
+% 
+% OUTPUT ARGUMENTS
+%
+% h (struct)
+%    .plane         (vector) handles to the axes objects (subplots)
+%    .colorbar      (vector) handles to the colorbars. Colorbars of empty
+%                            & color planes do not exist: the corresponding
+%                            value in the vector is -1
+%    .label         (vector) handles to the axis labels
+%
+% OBJECT TAGS
+%
+% The property field 'Tag' of the axis objects created by this function 
+% are set to contain string 'Cplane' if the axis contains component plane
+% ('comp'), color plane ('color') or empty plane ('empty') and string
+% 'Uplane' if it contains a u-matrix ('umat'). The tag is set to 
+% 'CplaneI' for planes created using 'compi' and 'colori', and 
+% 'UplaneI' for 'umati'.
+%
+% FEATURES
+%
+% Note that when interpolated shading is used in coloring ('compi' and
+% 'colori') the standard built-in bilinear Gouraud interpolation for a 
+% SURF object is used. If the lattice is hexagonal - or anything else than 
+% rectangular in general - the result is not strictly what is looked 
+% for, especially if the map is small. 
+%
+% EXAMPLES
+%
+%% Make random data, normalize it, and give component names
+%% Make a map
+%
+%   data=som_data_struct(rand(1000,3),'comp_names',{'One','Two','Three'});
+%   data=som_normalize(data,'var');
+%   map=som_make(data);
+%
+%% Do the basic visualization with som_show: u-matrix and all
+%% component planes
+%
+%   som_show(map);   
+%
+%% The values shown in the colorbar are denormalized codebook values 
+%% (if denormalization is possible). To view the actual values, use
+%% the ..., 'norm', 'n' argument pair.
+%
+%   som_show(map,'norm','n')
+%
+%% Something more complex:
+%% Show 1-2. Component planes 1 and 2 (variables 'One' and 'Two')
+%%        3. U-matrix that is calculated only using variables
+%%           'One' and 'Two' 
+%%           with title '1,2 only'
+%%        4. U-matrix that is calculated using all variables with the 
+%%           deafult title 'U-matrix'
+%%        5. The color code (in c) with title 'Color code'
+%%        6. Component plane 3 (variable 'Three')
+%% and  use vertical colorbars and and the values      
+%% But first: make a continuous color code (see som_colorcode)
+%
+% c=som_colorcode(map,'rgb1');
+% 
+% som_show(map,'comp',[1 2],'umat',{1:2,'1,2 only'},'umat','all', ...
+%  'color',{c,'Color code'},'bar','vert','norm','n','comp',3)
+%
+%  SEE ALSO
+%
+% som_show_add   Show hits, labels and trajectories on SOM_SHOW visualization.
+% som_show_clear Clear hit marks, labels or trajectories from current figure. 
+% som_umat       Compute unified distance matrix of self-organizing map.
+% som_grid       Visualization of a SOM grid.
+% som_cplane     Visualization of component, u-matrix and color planes.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 1.0beta johan 100298 
+% Version 2.0beta johan 201099 juuso 181199 johan 011299-100200
+%                 juuso 130300 190600
+
+%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(1,Inf,nargin))     % check no. of input args
+
+if isstruct(sMap),               % check map
+  [tmp,ok,tmp]=som_set(sMap);
+  if all(ok) & strcmp(sMap.type,'som_map') 
+    ;
+  else
+    error('Map struct is invalid!');
+  end
+else
+  error('Requires a map struct!')
+end
+
+munits=size(sMap.codebook,1); % numb. of map units
+d=size(sMap.codebook,2);      % numb. of components
+msize=sMap.topol.msize;       % size of the map
+lattice=sMap.topol.lattice;   % lattice
+
+if length(msize)>2 
+  error('This visualizes only 2D maps!')
+end
+
+if rem(length(varargin),2)
+  error('Mismatch in identifier-value  pairs.');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  read in optional arguments
+ 
+if isempty(varargin),
+  varargin = { 'umat','all','comp','all'};
+end
+
+%% check the varargin and build visualization infostrcuts
+% Vis:       what kind of planes, in which order, what are the values in
+%            the units
+% Vis_param: general properties
+% see subfunction
+
+% The try-catch construction is here just for avoiding the
+% possible termination to happen in subfunction because an error
+% message containing subfunction line numbers etc. might be confusing, as
+% there probably is nothing wrong with the subfunction but with the 
+% input. Ok, this isn't proper programming sytle... 
+
+try       
+  [Plane, General]= check_varargin(varargin, munits, d, sMap.name);
+catch
+  error(lasterr);
+end
+
+% Set default values for missing ones
+
+% No planes at all (only general properties given in varargin):
+% set default visualization
+
+if isempty(Plane)
+  varargin = [varargin, { 'umat','all','comp','all'}];
+  % and again we go...
+  try
+    [Plane, General]= check_varargin(varargin, munits, d, sMap.name);
+  catch
+    error(lasterr);
+  end
+end
+
+% set defaults for general properties
+
+if isempty(General.colorbardir)
+  General.colorbardir='vert';
+end
+
+if isempty(General.scale)
+  General.scale='denormalized';
+end
+
+if isempty(General.size)
+  General.size=1;
+end
+
+if isempty(General.edgecolor)
+  General.edgecolor='none';
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% get rid of an annoying warning: "RGB color data not yet supported in
+% Painter's mode."
+%set(gcf, 'renderer','zbuffer'); 
+%% -> a much more annoying thing results: the output to PostScript is 
+%%    as bitmap, making the files over 6MB in size... 
+
+n=length(Plane);                     % the number of subfigures
+
+% get the unique component indices
+c=General.comp(General.comp>0);
+c=setdiff(unique(c),[0 -1]); 
+c=c(~isnan(c));                   
+
+% estimate the suitable dimension for
+if isempty(General.subplots), 
+  y=ceil(sqrt(n));                   % subplots
+  x=ceil(n/y);
+else
+  y = General.subplots(2); 
+  x = General.subplots(1); 
+  if y*x<n, 
+    error(['Given subplots grid size is too small: should be >=' num2str(n)]); 
+  end    
+end
+
+clf;                               % clear figure
+
+for i=1:n,                         % main loop
+  h_axes(i,1)=subplot(x,y,i);      % open a new subplot
+  
+  % Main switch: select function according to the flags set in comps  
+
+  switch Plane{i}.mode
+  
+  case 'comp'
+    %%% Component plane
+
+    tmp_h=som_cplane(lattice,msize, sMap.codebook(:,General.comp(i)), ...
+		     General.size);
+    set(tmp_h,'EdgeColor', General.edgecolor);
+    set(h_axes(i),'Tag','Cplane');
+    h_label(i,1)=xlabel(sMap.comp_names{General.comp(i)});
+    
+
+  case 'compi'
+    %%% Component plane (interpolated shading)
+    
+    tmp_h=som_grid(lattice, msize, 'surf', sMap.codebook(:,Plane{i}.value), ...
+	'Marker', 'none', 'Line', 'none');
+    set(h_axes(i),'Tag','CplaneI');
+    h_label(i,1)=xlabel(sMap.comp_names(Plane{i}.value));
+    vis_PlaneAxisProperties(gca,lattice,msize,NaN);
+  
+  case 'color'
+    %%% Color plane
+
+    tmp_h=som_cplane(lattice,msize,Plane{i}.value,General.size);
+    set(tmp_h,'EdgeColor','none');
+    set(h_axes(i),'Tag','Cplane');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    
+      
+  case 'colori'
+    %%% Color plane (interpolated shading)
+    
+    tmp_h=som_grid(lattice, msize, 'surf', Plane{i}.value, 'Marker', 'none', ...
+	'Line', 'none');
+    set(h_axes(i),'Tag','CplaneI');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    vis_PlaneAxisProperties(gca,lattice,msize,NaN);
+  
+  case 'empty'      
+    %%% Empty plane
+    
+    tmp_h=som_cplane(lattice,msize,'none');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    set(h_axes(i),'Tag','Cplane');
+    
+  case 'umat'
+    %%% Umatrix  
+    
+    u=som_umat(sMap.codebook(:,Plane{i}.value),sMap.topol,'median',...
+	'mask',sMap.mask(Plane{i}.value)); u=u(:);
+    tmp_h=som_cplane([lattice 'U'],msize,u);
+    set(tmp_h,'EdgeColor','none');
+    set(h_axes(i),'Tag','Uplane');
+    h_label(i,1)=xlabel(Plane{i}.name);
+
+  case 'umati'
+    %%% Umatrix (interpolated shading) 
+    
+    u=som_umat(sMap.codebook(:,Plane{i}.value),sMap.topol,'mean',...
+	'mask',sMap.mask(Plane{i}.value)); u=u(1:2:end,1:2:end);
+    u=u(:);
+    tmp_h=som_grid('rect', msize, 'surf', u, ...
+	'Marker', 'none', 'Line', 'none', ...
+	'coord', som_vis_coords(lattice,msize));
+    set(h_axes(i),'Tag','UplaneI');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    vis_PlaneAxisProperties(gca,lattice,msize,NaN);
+    
+  otherwise
+    error('INTERNAL ERROR: unknown visualization mode.');
+  end
+
+  %%% Adjust axis ratios to optimal (only 2D!) and put the
+  %%% title as close to axis as possible
+
+  set(h_label,'Visible','on','verticalalignment','top');
+  set(gca,'plotboxaspectratio',[msize(2) msize(1) msize(1)]);
+  
+  %%% Draw colorbars if they are turned on and the plane is umat or c-plane
+
+  if General.comp(i)> -1 & ~strcmp(General.colorbardir,'none'),
+    h_colorbar(i,1)=colorbar(General.colorbardir);           % colorbars
+  else
+    h_colorbar(i,1)=-1;
+    General.comp(i)=-1;
+  end
+end         %% main loop ends
+  
+% Set window name
+
+set(gcf,'Name',[ 'Map name: ' sMap.name]);
+
+%% Set axes handles to the UserData field (for som_addxxx functions
+%% and som_recolorbar) 
+%% set component indexes and normalization struct for som_recolorbar
+
+SOM_SHOW.subplotorder=h_axes;
+SOM_SHOW.msize=msize;
+SOM_SHOW.lattice=lattice;
+SOM_SHOW.dim=d;
+SOM_SHOW.comps=General.comp;
+SOM_SHOW.comp_norm=sMap.comp_norm; %(General.comp(find(General.comp>0)));
+
+set(gcf,'UserData', SOM_SHOW);
+
+% Set text property 'interp' to 'none' in title texts
+
+set(h_label,'interpreter','none');
+
+h_colorbar=som_recolorbar('all', 3, General.scale);   %refresh colorbars
+
+% Set a movable text to lower corner pointsize 12.
+
+vis_footnote(General.footnote);  vis_footnote(12);  
+
+% set colormap
+colormap(General.colormap);
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+if nargout > 0
+  h.plane=h_axes; h.colorbar=h_colorbar; h.label=h_label;
+end
+
+
+%%%%%% SUBFUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [Plane, General]=check_varargin(args, munits, dim, name)
+
+% args: varargin of the main function
+% munits: number of map units
+% dim: map codebook dimension
+% name: map name
+% Define some variables (they must exist later)
+
+Plane={};           % stores the visualization data for each subplot
+General.comp=[];    % information stored on SOM_SHOW figure (which component)
+General.size=[];            % unit size
+General.scale=[];           % normalization
+General.colorbardir=[];     % colorbar direction
+General.edgecolor=[];       % edge colors
+General.footnote=name;      % footnote text
+General.colormap=colormap;  % default colormap (used to be gray(64).^.5;)
+General.subplots=[];        % number of subplots in y- and x-directions
+
+for i=1:2:length(args),
+  %% Check that all argument types are strings
+  
+  if ~ischar(args{i}),
+    error('Invalid input identifier names or input argument order.');
+  end
+  
+  %% Lower/uppercase in identifier types doesn't matter: 
+  
+  identifier=lower(args{i});     % identifier (lowercase)
+  value=args{i+1};
+  
+  %%% Check first the identifiers that define planes and get values
+  %%% to the visualization data struct array Plane.
+  %%% (comps,compi,umat,color,empty) Note that name, value and comp_
+  %%% must be specified in these cases 
+  %%% comp_ are collected to comp in order. This is stored to the
+  %%% SOM_SHOW user property field to give information for SOM_RECOLROBAR
+  %%% how to operate, i.e., which component is in which subplot:
+  %%% comp(i)=0: draw colorbar, but no normalization (umat) 
+  %%% comp(i)=1...N: a component plane of variable comp(i)
+  %%% comp(i)=-1: no colorbar (color or empty plane)    
+  
+  switch identifier  
+   case {'comp','compi'}
+    %%% Component planes: check values & set defaults
+    
+    if ~vis_valuetype(value,{'nx1','1xn','string'}) & ~isempty(value),
+      error([ 'A vector argument or string ''all'' expected for ''' ...
+	      identifier '''.'])
+    end
+    if isempty(value) 
+      value=1:dim;
+    elseif ischar(value), 
+      if ~strcmp(value,'all')
+	error([ 'Only string value ''all'' is valid for ''' ...
+		identifier '''.']);
+      else
+	value=1:dim;
+      end
+    else
+      value=round(value);
+      if min(value)<1 | max(value)>dim,
+	error([ 'Component indices out of range in ''' identifier '''.']) 
+      end
+    end
+    if size(value,1)==1, value=value';end
+    comp_=value; 
+    name=[]; % name is taken form sMap by index in main loop 
+    
+  case {'umat','umati'}
+    %%% Check first the possible cell input
+    
+    if iscell(value),
+      if ndims(value) ~= 2 | any(size(value) ~= [1 2]) | ...
+	    ~vis_valuetype(value{2},{'string'}),
+	error('Cell input for ''umat'' has to be of form {vector, string}.');
+      else
+	name=value{2}; value=value{1};
+      end
+    else 
+      name='U-matrix'; % no cell: default title is set
+    end
+    if ~vis_valuetype(value,{'nx1','1xn','string'}) & ~isempty(value),
+      error('Vector, string ''all'', or cell {vector, string} expected for ''umat''.')
+    end
+    if isempty(value)
+      value=1:dim;
+    elseif ischar(value), 
+      if ~strcmp(value,'all')
+	error('Only string value ''all'' is valid for ''umat''.')
+      else
+	value=1:dim;
+      end
+    else
+      value=unique(round(value));
+    end
+    if min(value)<1 | max(value)>dim,
+      error('Component indices out of range in ''umat''.') 
+    end
+    
+    if size(value,1)==1, value=value';end
+    comp_=0;
+    
+  case 'empty'
+    %%% Empty plane: check values & set defaults
+    
+    if ~vis_valuetype(value,{'string'}), 
+      error('A string value for title name expected for ''empty''.');
+    end
+    name=value;
+    comp_=-1;
+    
+  case { 'color','colori'}
+    %%% Color plane: check values & set defaults
+    
+    % Check first the possible cell input
+    if iscell(value),
+      if ndims(value)~=2 | any(size(value) ~= [1 2]) | ...
+	    ~vis_valuetype(value{2},{'string'}),
+	error([ 'Cell input for ''' identifier ...
+	      ''' has to be of form {M, string}.']);
+      else
+	name=value{2}; value=value{1};
+      end
+    else 
+      name='Color code'; % no cell: default title is set
+    end
+    if size(value,1)~=munits | ...
+	  (~vis_valuetype(value,{'nx3rgb'}) & ... 
+	   ~vis_valuetype(value,{'nx1'}) & ...
+	   ~vis_valuetype(value,{'nx1xm'}) & ...
+	   ~vis_valuetype(value,{'nx3xdimrgb'})),
+      error(['Mx3 or Mx3xN RGBmatrix, Mx1 or Mx1xN matrix, cell '...
+	     '{RGBmatrix, string},' ...
+	     ' or {matrix, string} expected for ''' identifier '''.']);
+    end
+
+    % if colormap is fixed, we don't draw colorbar (comp_ flag is -1)
+    % if colormap is indexed, we draw colorbar as in umat (comp_=0)
+
+    if size(value,2)==3
+      comp_=-1;
+    else
+      comp_=0;
+    end
+    
+    %%%% The next things are general properties of the visualization---
+    %%%%
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    
+  case 'size'
+    %%% Unit size: check & set
+  
+    if ~vis_valuetype(value,{'1x1',[munits 1]})
+      error('A munits x 1 vector or a scalar expected for ''size''.')
+    end
+    if isempty(value),
+      General.size=1;
+    else
+      General.size=value;
+    end
+    
+   case 'bar'
+    %%% Colorbar existence & direction: check & set
+    
+    if ~vis_valuetype(value,{'string'})
+      error('String value expected for ''bar''.')
+    elseif isempty(value)
+      value='vert';
+    end
+    if any(strcmp(value,{'vert','horiz','none'})),
+      General.colorbardir=value;
+    else
+      error('String ''vert'', ''horiz'' or ''none'' expected for ''bar''.');
+    end
+    
+  case 'norm' 
+    %%% Value normalization: check & set
+    
+    if ~vis_valuetype(value,{'string'})
+      error('String ''n'' or ''d'' expected for ''norm''.');
+    elseif isempty(value)
+      value='n';
+    end
+    if strcmp(value(1),'n'), 
+      General.scale='normalized';
+    elseif strcmp(value(1),'d'),
+      General.scale='denormalized';
+    else
+      error('String ''n(ormalized)'' or ''d(enormalized)'' expected for ''norm''.');
+    end
+    
+  case 'edge'
+    %%% Edge on or off : check % set 
+    
+    if ~vis_valuetype(value,{'string'}) & ~isempty(value),
+      error('String value expected for ''edge''.')
+    elseif ~isempty(value),
+      switch value
+      case 'on'
+	General.edgecolor='k';
+      case 'off' 
+	General.edgecolor='none';
+      otherwise
+	error('String value ''on'' or ''off'' expected for ''edge''.')  
+      end
+    end
+    
+  case 'footnote'
+    %%% Set the movable footnote text  
+    
+    if ~vis_valuetype(value,{'string'}) 
+      if ~isempty(value),
+	error('String value expected for ''footnote''.');
+      else
+	General.footnote=sMap.name;
+      end
+    else
+      General.footnote=value;
+    end
+
+   case 'colormap'
+    %%% Set the colormap
+    if isempty(value)
+      General.colormap=gray(64).^2;
+    elseif ~vis_valuetype(value,{'nx3rgb'})
+      error('Colormap is invalid!');
+    else
+      General.colormap=value;
+    end
+    
+   case 'subplots'
+    %%% set the number of subplots
+    if ~vis_valuetype(value,{'1x2'}) & ~vis_valuetype(value,{'2x1'})
+      error('Subplots grid size is invalid!');
+    else
+      General.subplots=value; 
+    end
+    
+  otherwise
+    %%% Unknown identifier
+    
+    error(['Invalid argument identifier ''' identifier '''!']);
+  end
+  
+  %%% Set new entry to the Plane array if the indentifier means 
+  %%% making a new plane/planes
+  
+  tail=length(Plane);
+  switch identifier
+  case {'comp','compi'}
+    for i=1:length(value)
+      Plane{tail+i}.mode=identifier;
+      Plane{tail+i}.value=value(i);
+      Plane{tail+i}.name=name; % not used actually
+    end
+    General.comp = [General.comp; comp_];
+   case {'umat','umati','empty'}
+    Plane{tail+1}.mode=identifier;
+    Plane{tail+1}.value=value;
+    Plane{tail+1}.name=name;
+    General.comp = [General.comp; comp_];
+   case {'color','colori'},
+    for i=1:size(value,3),
+      Plane{tail+i}.mode=identifier;
+      Plane{tail+i}.name=[name '_' num2str(i)];
+      Plane{tail+i}.value=value(:,:,i);
+      General.comp = [General.comp; comp_];
+    end
+    if size(value,3)==1,
+      Plane{tail+1}.name=name;
+    end
+  otherwise
+    ; % do nothing
+  end
+end