📄 compmap.m
字号:
% compmap() - Plot multiple topoplot() maps of ICA component topographies% Click on an individual map to view separately. % Usage:% >> compmap (winv,'eloc_file',compnos,'title',rowscols,labels,printflag)%% Inputs:% winv - Inverse weight matrix = EEG scalp maps. Each column is a% map; the rows correspond to the electrode positions% defined in the eloc_file. Normally, winv = inv(weights*sphere).% 'eloc_file' - Name of the eloctrode position file in the style defined% by >> topoplot example {default|0 ->'chan_file'}% compnos - Vector telling which (order of) component maps to show% Indices <0 tell compmap to invert a map; = 0 leave blank sbplot % Example [1 0 -2 3 0 -6] {default|0 -> 1:columns_in_winv}% 'title' - Title string for each page {default|0 -> 'ICA Component Maps'}% rowscols - Vector of the form [m,n] where m is total vertical tiles and n % is horizontal tiles per page. If the number of maps exceeds m*n,% multiple figures will be produced {def|0 -> one near-square page}.% labels - Vector of numbers or a matrix of strings to use as labels for% each map, else ' ' -> no labels {default|0 -> 1:ncolumns_in_winv}% printflag - 0= screen-plot colors {default}% 1= printer-plot colors%% Note: Map scaling is to +/-max(abs(data); green = 0%% Author: Colin Humphries, CNL / Salk Institute, Aug, 1996%% See also: topoplot()% This function calls topoplot(). and cbar().% Copyright (C) Colin Humphries & Scott Makeig, CNL / Salk Institute, Aug, 1996%% 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% (at your option) 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% $Log: compmap.m,v $% Revision 1.1 2002/04/05 17:36:45 jorn% Initial revision%% Colin Humphries, CNL / Salk Institute, Aug, 1996% 03-97 revised -CH% 11-05-97 revised for Matlab 5.0.0.4064; added negative compnnos option% improved help msg; added figure offsets -Scott Makeig & CH% 11-13-97 fixed compnos<0 bug -sm% 11-18-97 added test for labels=comps -sm % 12-08-97 added test for colorbar_tp() -sm% 12-15-97 added axis('square'), see SQUARE below -sm% 03-09-98 added test for eloc_file, fixed size checking for labels -sm% 02-09-00 added test for ' ' for srclabels(1,1) -sm% 02-23-00 added srclabels==' ' -> no labels -sm% 03-16-00 added axcopy() -sm & tpj% 02-25-01 added test for max(compnos) -sm% 05-24-01 added HEADPLOT logical flag below -sm% 01-25-02 reformated help & license -ad % NOTE: % There is a minor problem with the Matlab function colorbar().% Use the toolbox cbar() instead.function compmap(Winv,eloc_file,compnos,titleval,pagesize,srclabels,printlabel,caxis)DEFAULT_TITLE = 'ICA Component Maps';DEFAULT_EFILE = 'chan_file';NUMCONTOUR = 5; % topoplot() style settingsOUTPUT = 'screen'; % default: 'screen' for screen colors, % 'printer' for printer colorsSTYLE = 'both';INTERPLIMITS = 'head';MAPLIMITS = 'absmax';SQUARE = 1; % 1/0 flag making topoplot() asex square -> round headsELECTRODES = 'on'; % default: 'on' or 'off'ELECTRODESIZE = []; % defaults 1-10 set in topoplot text.HEADPLOT = 0; % 1/0 plot 3-D headplots instead of 2-d topoplots.if nargin<1 help compmap returnendcuraxes = gca;curpos = get(curaxes,'Position');mapaxes = axes('Position',[curpos(1) curpos(2)+0.09 curpos(3) curpos(4)-0.09],... 'Visible','off'); % leave room for cbarset(mapaxes,'visible','off');pos = get(mapaxes,'Position');% delete(gca);% ax = axes('Position',pos);[chans, frames] = size (Winv);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check inputs and set defaults%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if nargin==8 if caxis(1,1:2) == 'mi' % min/max of data MAPLIMITS = [min(min(Winv(:,compnos))) max(max(Winv(:,compnos)))]; elseif caxis(1,1:2) == 'ab' % +/-max abs data absmax = max([abs(min(min(Winv(:,compnos)))) abs(max(max(Winv(:,compnos))))]); MAPLIMITS = [-absmax absmax]; elseif size(caxis) == [1,2] % given color axis limits MAPLIMITS = caxis; end % else defaultendif nargin < 7 printlabel = 0;endif printlabel == 0 printlabel = OUTPUT; % default set aboveelse printlabel = 'printer';endif nargin < 6 srclabels = 0;endif nargin < 5 pagesize = 0; endif nargin < 4 titleval = 0;endif nargin < 3 compnos = 0;endif nargin < 2 eloc_file = 0;endif srclabels == 0 srclabels = [];endif titleval == 0; titleval = DEFAULT_TITLE;endif compnos == 0 compnos = (1:frames);endif max(compnos)>frames fprintf('compmap(): Cannot show comp %d. Only %d components in inverse weights\n',... max(compnos),frames); returnendif pagesize == 0 numsources = length(compnos); DEFAULT_PAGE_SIZE = ...[floor(sqrt(numsources)) ceil(numsources/floor(sqrt(numsources)))]; m = DEFAULT_PAGE_SIZE(1); n = DEFAULT_PAGE_SIZE(2);elseif length(pagesize) ==1 help compmap returnelse m = pagesize(1); n = pagesize(2);endif eloc_file == 0 eloc_file = DEFAULT_EFILE;endtotalsources = length(compnos);if ~isempty(srclabels) if ~ischar(srclabels(1,1)) | srclabels(1,1)==' ' % if numbers if size(srclabels,1) == 1 srclabels = srclabels'; end end if size(srclabels,1)==1 & size(srclabels,2)==1 & srclabels==' ' srclabels = repmat(srclabels,totalsources,1); end if size(srclabels,1) ~= totalsources, fprintf('compmap(): numbers of components and component labels do not agree.\n'); return endendpages = ceil(totalsources/(m*n)); if pages > 1 fprintf('compmap(): will create %d figures of %d by %d maps: ',... pages,m,n);endoff = [ 25 -25 0 0]; % position offsets for multiple figuresfid = fopen(eloc_file);if fid<1, fprintf('compmap()^G: cannot open eloc_file (%s).\n',eloc_file); returnendfclose(fid);%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot the maps %%%%%%%%%%%%%%%%%%%%%%%for i = (1:pages) if i > 1 figure('Position',pos+(i-1)*off); % place figures in right-downward stack set(gca,'Color','w') %CJH - set background color to white curaxes = gca; curpos = get(curaxes,'Position'); % new whole-figure axes end if (totalsources > i*m*n) sbreak = n*m; else sbreak = totalsources - (i-1)*m*n; % change page/figure after this many end for j = (1:sbreak) % maps on this page/figure comp = j+(i-1)*m*n; % compno index if compnos(comp)~=0 if compnos(comp)>0 source_var = Winv(:,compnos(comp))'; % plot map elseif compnos(comp)<0 source_var = -1*Winv(:,-1*compnos(comp))'; % invert map end sbplot(m,n,j,'ax',mapaxes); if HEADPLOT headplot(source_var,eloc_file,'electrodes','off'); % 3-d image else topoplot(source_var,eloc_file,... 'style',STYLE,... 'electrodes',ELECTRODES,... 'emarkersize',ELECTRODESIZE,... 'numcontour',NUMCONTOUR,... 'interplimits',INTERPLIMITS,... 'maplimits',MAPLIMITS); % draw 2-d scalp map end if SQUARE, axis('square'); end if isempty(srclabels) title(int2str(compnos(comp))) ; else if isstr(srclabels) title(srclabels(comp,:)); else title(num2str(srclabels(comp))); end end drawnow % draw one map at a time end end % ax = axes('Units','Normal','Position',[.5 .06 .32 .05],'Visible','Off'); gca = curaxes; set(gca,'Visible','off','Units','normalized'); curpos = get(gca,'position'); ax = axes('Units','Normalized','Position',... [curpos(1)+0.5*curpos(3) curpos(2)+0.01*curpos(4) ... 0.32*curpos(3) 0.05*curpos(4)],'Visible','Off'); if exist('cbar') == 2 cbar(ax); % Slightly altered Matlab colorbar() % Write authors for further information. else colorbar(ax); % Note: there is a minor problem with this call. end axval = axis; Xlim = get(ax,'Xlim'); set(ax,'XTick',(Xlim(2)+Xlim(1))/2); set(ax,'XTickMode','manual'); set(ax,'XTickLabelMode','manual'); set(ax,'XTickLabel','0'); axes(curaxes); axis off; % axbig = axes('Units','Normalized','Position',[0 0 1 1],'Visible','off'); t1 = text(.25,.07,titleval,'HorizontalAlignment','center'); if pages > 1 fprintf('%d ',i); end axcopy(gcf); % allow popup window of single map with mouse clickendif pages > 1 fprintf('\n');end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -