chanproj.m
来自「含有多种ICA算法的eeglab工具箱」· M 代码 · 共 241 行
M
241 行
% chanproj() - make a detailed plot of data returned from plotproj() % for given channel. Returns the data plotted.% Usage:% >> [chandata] = chanproj(projdata,chan);% >> [chandata] = chanproj(projdata,chan,ncomps,framelist,limits,title,colors);%% Inputs:% projdata = data returned from plotproj() % chan = single channel to plot% ncomps = number of component projections in projdata%% Optional:% framelist = data frames to plot per epoch Ex: [1:128] (0|def -> all)% limits = [xmin xmax ymin ymax] (x's in msec) % (0, or y's 0 -> data limits)% title = fairly short single-quoted 'plot title' (0|def -> chan)% colors = file of color codes, 3 chars per line (NB: '.' = space) % (0|def -> white is original data)%% Author: Scott Makeig, SCCN/INC/UCSD, La Jolla, 1996 %123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) 1996 Scott Makeig, SCCN/INC/UCSD, scott@sccn.ucsd.edu%% 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: chanproj.m,v $% Revision 1.1 2002/04/05 17:36:45 jorn% Initial revision%% 11-30-96 Scott Makeig CNL / Salk Institute, La Jolla as plotprojchan.m% 03-19-97 changed var() to diag(cov()) -sm% 03-26-97 fix (== -> =) -sm% 04-03-97 allow framelist to be a col vector, allow 32 traces, fix pvaf, made% ncomps mandatory -sm% 04-04-97 shortened name to chanproj() -sm% 05-20-97 added read of icadefs.m -sm% 11-05-97 disallowed white traces unless default axis color is white -sm & ch% 11-13-97 rm'ed errcode variable -sm% 12-08-97 added LineWidth 2 to data trace, changed whole plot color to BACKCOLOR -sm% 01-25-02 reformated help & license -ad function [chandata] = chanproj(projdata,chan,ncomps,framelist,limits,titl,colorfile)icadefs; % read default MAXPLOTDATACHANSif nargin < 7, colorfile =0;endif nargin < 6, titl = 0;endif nargin < 5, limits = 0;endif nargin < 4, framelist = 0;endif nargin < 3, fprintf('chanproj(): requires at least three arguments.\n\n'); help chanproj returnend[chans,framestot] = size(projdata);frames = fix(framestot/(ncomps+1));if ncomps < 1 | frames*(ncomps+1) ~= framestot, fprintf(... 'chanproj(): data length (%d) not a multiple of ncomps (%d).\n',... framestot,ncomps); returnend; if chan> chans, fprintf(... 'chanproj(): specified channel (%d) cannot be > than nchans (%d).\n',... chan,chans); returnelse chandata = projdata(chan,:); epochs = fix(length(chandata)/frames);end;if epochs > MAXPLOTDATACHANS fprintf(... 'chanproj(): maximum number of traces to plot is %d\n',... MAXPLOTDATACHANS); returnendif framestot~=epochs*frames, fprintf('chanproj(): projdata is wrong length.\n'); % exit returnend%%%%%%%%%%%%%%%%% Find or read plot limits %%%%%%%%%%%%%%%%%%%%%%%%%%%%if limits==0, xmin=0;xmax=0;ymin=0;ymax=0;else if length(limits)~=4, fprintf( ...'chanproj():^G limits should be 0 or an array [xmin xmax ymin ymax].\n'); return end; xmin = limits(1); xmax = limits(2); ymin = limits(3); ymax = limits(4);end;if xmin == 0 & xmax == 0, x = [0:frames-1]; xmin = 0; xmax = frames-1;else dx = (xmax-xmin)/(frames-1); x=xmin*ones(1,frames)+dx*(0:frames-1); % construct x-valuesend;if ymax == 0 & ymin == 0, ymax=max(max(projdata(chan,:))); ymin=min(min(projdata(chan,:)));end%%%%%% Reshape the projdata for plotting and returning to user %%%%%%%%%%chandata=reshape(chandata,frames,epochs);chandata=chandata';if framelist ==0, framelist = [1:frames]; % defaultendif size(framelist,2)==1, if size(framelist,1)>1, framelist = framelist'; else fprintf(... 'chanproj(): framelist should be a vector of frames to plot per epoch.\n'); return endend if framelist(1)<1 | framelist(length(framelist))>frames, fprintf('chanproj(): framelist values must be between 1-%d.\n',frames); returnelse chandata=chandata(:,framelist);end%%%%%%%%%%%%%%%%%%%% Read the color names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if colorfile ~=0, if ~isstr(colorfile) fprintf('chanproj(); color file name must be a string.\n'); return end cid = fopen(colorfile,'r'); if cid <3, fprintf('chanproj(): cannot open file %s.\n',colorfile); return end; colors = fscanf(cid,'%s',[3 MAXPLOTDATACHANS]); colors = colors'; [r c] = size(colors); for i=1:r for j=1:c if colors(i,j)=='.', colors(i,j)=' '; end; end; end;else % default color order - no yellow colors =['w ';'r ';'b ';'g ';'c ';'m ';'r ';'b ';'g ';'c ';'m ';'r ';'b ';'g ';'c ';'m ';'r ';'b ';'g ';'c ';'m ';'r ';'b ';'g ';'c ';'m ';'r ';'b ';'g ';'c ';'m ';'r '];end;%% Make vector of x-values%x=[xmin:(xmax-xmin)/(frames-1):xmax+0.00001];xmin=x(framelist(1));xmax=x(framelist(length(framelist)));x = x(framelist(1):framelist(length(framelist)));%%%%%%%%%% Compute percentage of variance accounted for %%%%%%%%%%%%%%%if epochs>1, sumdata = zeros(1,length(framelist)); for e=2:epochs sumdata= sumdata + chandata(e,:); % sum the component projections end sigvar = diag(cov(chandata(1,:)')); difvar = diag(cov(((chandata(1,:)-sumdata)'))); % percent variance accounted for pvaf = round(100.0*(1.0-difvar/sigvar)); end%%%%%%%%%%%%%%%%%%%%%%% Plot traces %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fprintf('chanproj(): Drawing trace ');for e=1:epochs, fprintf ('%d ',e); set(gcf,'Color',BACKCOLOR); % set the background color to grey set(gca,'Color','none'); % set the axis color = figure color if e==1 plot(x,chandata(e,:),colors(e),'LineWidth',2); % plot it! else plot(x,chandata(e,:),colors(e),'LineWidth',1); % plot it! end hold on;end;fprintf('\n');%%%%%%%%%%%%%%%%%%%%% Fix axis limits %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%axis([xmin xmax ymin-0.1*(ymax-ymin) ymax+0.1*(ymax-ymin)]);%%%%%%%%%%%%%%%%%%%% Add title and labels %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if titl==0, titl = ['channel ' int2str(chan)];endtitl = [ titl ' (p.v.a.f. ' int2str(pvaf) '%)' ];title(titl);xlabel('Time (msec)');ylabel('Potential (uV)');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?