123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729 |
- %% define some variables
- filt = 2; % 1: non, 2: 0.1 Hz, 3: 10 Hz, 4: 150 Hz, 5: 300 Hz
- cutTime = 1; % plot only certain time window? (0: no, 1: short, 2: long)
- avType = 1; % plot grand average (1) or individual averages (2)
- fixedY = 1; % use dynamic (0) or fixed (1) y-axis?
- inclCtrl = 2; % plot control data? (0: no, 1: 50 %, 2: MR, 3: both controls)
- statsType = 2; % decide which statistics to use if control is included; 1: t-test, 2: ANOVA
- plotWinI = 1; % plot RMS-windows?
- plotRespI = 1; % plot responses?
- plotDifI = 0; % plot difference curves?
- plotMtrxI = 0; % plot all responses in a matrix?
- plotHmI = 0; % plot heatmap?
- hmDataI = 1; % choose data that should be plotted as heatmap (1: Cohens D; 2: RMS of control, only useful for 50Per dataset)
- plotBpI = 0; % plot boxplots?
- stimMark = 0; % decide how to plot the stimulus (no: 0, bar: 1)
- cStart = 1; % stimulus combination to start with
- oDisEloc = 0; % plot only DisNoAM and Eloc?
- saveI = 0; % save figure?
- % decide which set of rms-windows to plot
- switch filt
- case {1,2,3}
- switch cutTime
- case 0
- uWin = (1:5);
- boxpFigWi = 800; % width of boxplot figure
- case 1
- uWin = (4:4);
- boxpFigWi = 300; % width of boxplot figure
- case 2
- uWin = (4:5);
- boxpFigWi = 500; % width of boxplot figure
- end
- case {4,5}
- uWin = (1:3);
- boxpFigWi = 500; % width of boxplot figure
- end
- % uWin = uWin+5;
- switch filt
- case 1
- filtName = 'noF';
- y_lim = [-3.5,13];
- case 2
- filtName = '0.1F';
- y_lim = [-3.5,13];
- case 3
- filtName = '10F';
- y_lim = [-3.5,13];
- case 4
- filtName = '150F';
- y_lim = [-4.5,4.5];
- case 5
- filtName = '300F';
- y_lim = [-4,4];
- end
- % define colors and names
- colDev = [1,0,0]; % dev: red
- colStd = [0,0,1]; % std: blue
- col50Per = [1,0,1]; % 50 %: magenta
- colMR = [0,0,0]; % MR: black
- nameDev = 'Deviant';
- nameStd = 'Standard';
- name50Per = '50 % Control';
- nameMR = 'MS Control';
- %% load processed data
- switch inclCtrl
- case 0
- load('DD_statsData_noCtrl.mat') % load stats data
- case 1 % load 50Per data and rename important variables
- load('DD_avData_50Per.mat')
- dataAv_cell_Ctrl = dataAv_cell; % rename
- dataGrAv_cell_Ctrl = dataGrAv_cell;
- dataDifAv_cell_Ctrl = dataDifAv_cell; % rename
- dataDifGrAv_cell_Ctrl = dataDifGrAv_cell;
- dataSe_cell_Ctrl = dataSe_cell;
- filenames_cell_Ctrl = filenames_cell;
- load('DD_statsData_50Per.mat') % load stats data
- nameCtrl = name50Per;
- colCtrl = col50Per; % set control color to 50 % color
- case 2 % load MR data and rename important variables
- load('DD_avData_MR.mat')
- dataAv_cell_Ctrl = dataAv_cell; % rename
- dataGrAv_cell_Ctrl = dataGrAv_cell;
- dataDifAv_cell_Ctrl = dataDifAv_cell; % rename
- dataDifGrAv_cell_Ctrl = dataDifGrAv_cell;
- dataSe_cell_Ctrl = dataSe_cell;
- filenames_cell_Ctrl = filenames_cell;
- load('DD_statsData_MR.mat') % load stats data
- nameCtrl = nameMR;
- colCtrl = colMR; % set control color to MR color
- case 3
- load('DD_avData_50Per.mat')
- dataAv_cell_50Per = dataAv_cell; % rename
- dataGrAv_cell_50Per = dataGrAv_cell;
- dataDifAv_cell_50Per = dataDifAv_cell; % rename
- dataDifGrAv_cell_50Per = dataDifGrAv_cell;
- dataSe_cell_50Per = dataSe_cell;
- filenames_cell_50Per = filenames_cell;
- load('DD_avData_MR.mat')
- dataAv_cell_MR = dataAv_cell; % rename
- dataGrAv_cell_MR = dataGrAv_cell;
- dataDifAv_cell_MR = dataDifAv_cell; % rename
- dataDifGrAv_cell_MR = dataDifGrAv_cell;
- dataSe_cell_MR = dataSe_cell;
- filenames_cell_MR = filenames_cell;
- load('DD_statsData_bothCtrl.mat') % load stats data
- end
- % load Oddball data (will overwrite Ctrl variables that were not renamed)
- load('DD_avData_Oddball.mat')
- %% do some additional calculations
- switch zsNormI
- case 0
- ylableName = 'Voltage [µV]';
- case 1
- ylableName = 'z-norm. voltage [a.u.]';
- end
- switch cutTime
- case 1
- switch filt
- case {1,2,3}
- timeStart = -5; % starting time of the plot (relative to stim onset)
- timeEnd = 15; % ending time of the plot (relative to stim onset)
- case {4,5}
- timeStart = -5; % starting time of the plot (relative to stim onset)
- timeEnd = 15; % ending time of the plot (relative to stim onset)
- end
- case 2
- timeStart = -5; % starting time of the plot (relative to stim onset)
- timeEnd = 40; % ending time of the plot (relative to stim onset)
- end
- % some calculations for matrix- and heatmap-plotting
- combNameS = split(combName(cStart:end),","); % split comb names at comma
- if plotMtrxI==1||plotHmI==1
- oDisEloc = 0;
- cStart = 2; % skip first stimulus combination (pure tones)
- stimOrd = ["DisNoAM","DisAM","DisMimic","Eloc","ElocMimic"]; % define order of stimuli to plot in the matrix
- nStim = size(stimOrd,2);
- combCoord = zeros(nComb-1,2); % preallocate
- for c = 1:nComb-1
- for s = 1:2
- combCoord(c,s) = find(ismember(stimOrd,combNameS(c,s)));
- end
- end
- nTiles = 1:nStim*nStim; % number of tiles in matrix
- tileMtrx = reshape(nTiles,[nStim,nStim])'; % create matrix to use for indexing later
- end
- if oDisEloc==1 % plot only stim combination 7 (DisNoAM/Eloc) if oDisEloc is 1
- cStart = 7;
- nComb = 7;
- end
- %% plotting: responses
- if plotRespI==1
- switch plotMtrxI
- case 1
- figure('NumberTitle','off','Name','All Stims','Position',[0,0,2000,1300],'Renderer','painters')
- t = tiledlayout(nStim,nStim);
- end
- for c = cStart:nComb % run once for each stimulus combination
- % extract data corresponding to current stimulation-condition from
- % cell-arrays
- switch plotDifI
- case 0
- dataAv = dataAv_cell{c};
- dataGrAv = dataGrAv_cell{c};
- dataSe = dataSe_cell{c};
- switch inclCtrl
- case {1,2}
- dataAvCtrl = dataAv_cell_Ctrl{c};
- dataGrAvCtrl = dataGrAv_cell_Ctrl{c};
- dataSeCtrl = dataSe_cell_Ctrl{c};
- filenames_Ctrl = filenames_cell_Ctrl{c};
- bsPos = cell2mat(strfind(filenames_Ctrl,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames_Ctrl = extractAfter(filenames_Ctrl,startPos);
- case 3
- dataAv50Per = dataAv_cell_50Per{c};
- dataGrAv50Per = dataGrAv_cell_50Per{c};
- dataSe50Per = dataSe_cell_50Per{c};
- filenames_50Per = filenames_cell_50Per{c};
- bsPos = cell2mat(strfind(filenames_50Per,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames_50Per = extractAfter(filenames_50Per,startPos);
- dataAvMR = dataAv_cell_MR{c};
- dataGrAvMR = dataGrAv_cell_MR{c};
- dataSeMR = dataSe_cell_MR{c};
- filenames_MR = filenames_cell_MR{c};
- bsPos = cell2mat(strfind(filenames_MR,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames_MR = extractAfter(filenames_MR,startPos);
- end
- case 1
- dataAv = dataDifAv_cell_Ctrl{c};
- dataGrAv = dataDifGrAv_cell_Ctrl{c};
- plotWinI = 0; % plot no significance windows when plotting diference curves
- switch inclCtrl
- case 0
- error('To plot difference curves, activate inclCtrl')
- case {1,2}
- dataAvCtrl = dataAv_cell_Ctrl{c}; % won't be plotted, only processed to keep the code simpler
- dataGrAvCtrl = dataGrAv_cell_Ctrl{c};
- filenames_Ctrl = filenames_cell_Ctrl{c};
- bsPos = cell2mat(strfind(filenames_Ctrl,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames_Ctrl = extractAfter(filenames_Ctrl,startPos);
- case 3
- dataAv50Per = dataAv_cell_50Per{c}; % won't be plotted, only processed to keep the code simpler
- dataGrAv50Per = dataGrAv_cell_50Per{c};
- filenames_50Per = filenames_cell_50Per{c};
- bsPos = cell2mat(strfind(filenames_50Per,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames_50Per = extractAfter(filenames_50Per,startPos);
- dataAvMR = dataAv_cell_MR{c}; % won't be plotted, only processed to keep the code simpler
- dataGrAvMR = dataGrAv_cell_MR{c};
- filenames_MR = filenames_cell_MR{c};
- bsPos = cell2mat(strfind(filenames_MR,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames_MR = extractAfter(filenames_MR,startPos);
- end
- end
- filenames = filenames_cell{c};
- recID = recID_cell{c};
- bsPos = cell2mat(strfind(filenames,'\')); % find positions of back slashes in filename
- startPos = bsPos(:,end); % use last back slash position as starting point
- filenames = extractAfter(filenames,startPos);
- timetr = round(timetr_cell{c}*1000,4);
- stimDur = stimDur_cell{c}(1)*1000;
- stimDelay = stimDelay_cell{c}(1)*1000;
- stimWin = [stimDelay,stimDelay+stimDur];
- nFiles = nFiles_cell{c};
- fsDwn = fsDwn_cell{c};
- % process timetrace
- switch cutTime
- case 0
- timeWin = floor([timetr(1),timetr(end)]); % data in this window will be plotted (relative to recording onset)
- timeStart = timeWin(1)-(stimDelay);
- timeEnd = timeWin(2)-(stimDelay);
- timeCut = (1:size(timetr,2));
- case {1,2}
- timeWin = [round((stimDelay)+timeStart,4),...
- round((stimDelay)+timeEnd,4)]; % data in this window will be plotted (relative to recording onset)
- timeCut = round(timeWin(1)/1000*fsDwn:timeWin(2)/1000*fsDwn);
- end
- % subdivide responses for simplicity
- ADevAv = dataAv{1};
- AStdAv = dataAv{2};
- BDevAv = dataAv{3};
- BStdAv = dataAv{4};
- ADevGrAv = dataGrAv{1};
- AStdGrAv = dataGrAv{2};
- BDevGrAv = dataGrAv{3};
- BStdGrAv = dataGrAv{4};
- ADevSe = dataSe{1};
- AStdSe = dataSe{2};
- BDevSe = dataSe{3};
- BStdSe = dataSe{4};
- switch inclCtrl
- case {1,2}
- AAvCtrl = dataAvCtrl{1};
- BAvCtrl = dataAvCtrl{2};
- AGrAvCtrl = dataGrAvCtrl{1};
- BGrAvCtrl = dataGrAvCtrl{2};
- ASeCtrl = dataSeCtrl{1};
- BSeCtrl = dataSeCtrl{2};
- case 3
- AAv50Per = dataAv50Per{1};
- BAv50Per = dataAv50Per{2};
- AGrAv50Per = dataGrAv50Per{1};
- BGrAv50Per = dataGrAv50Per{2};
- ASe50Per = dataSe50Per{1};
- BSe50Per = dataSe50Per{2};
- AAvMR = dataAvMR{1};
- BAvMR = dataAvMR{2};
- AGrAvMR = dataGrAvMR{1};
- BGrAvMR = dataGrAvMR{2};
- ASeMR = dataSeMR{1};
- BSeMR = dataSeMR{2};
- end
- % plot single channel
- for s = 1:2 % once for A, once for B
- switch s
- case 1
- grAvStd = AStdGrAv;
- grAvDev = ADevGrAv;
- avStd = AStdAv;
- avDev = ADevAv;
- seStd = AStdSe;
- seDev = ADevSe;
- stimName = 'A';
- switch inclCtrl
- case {1,2}
- grAvCtrl = AGrAvCtrl;
- avCtrl = AAvCtrl;
- seCtrl = ASeCtrl;
- case 3
- grAv50Per = AGrAv50Per;
- av50Per = AAv50Per;
- se50Per = ASe50Per;
- grAvMR = AGrAvMR;
- avMR = AAvMR;
- seMR = ASeMR;
- end
- case 2
- grAvStd = BStdGrAv;
- grAvDev = BDevGrAv;
- avStd = BStdAv;
- avDev = BDevAv;
- seStd = BStdSe;
- seDev = BDevSe;
- stimName = 'B';
- switch inclCtrl
- case {1,2}
- grAvCtrl = BGrAvCtrl;
- avCtrl = BAvCtrl;
- seCtrl = BSeCtrl;
- case 3
- grAv50Per = BGrAv50Per;
- av50Per = BAv50Per;
- se50Per = BSe50Per;
- grAvMR = BGrAvMR;
- avMR = BAvMR;
- seMR = BSeMR;
- end
- end
- switch plotMtrxI
- case 0
- figure('NumberTitle','off','Name',[combName{c},'_',stimName],'Position',[0,0,1000,600])
- title(combNameS(c,s))
- case 1
- switch s % mirror coordinats with s
- case 1
- nexttile(tileMtrx(combCoord(c-1,2),combCoord(c-1,1)))
- case 2
- nexttile(tileMtrx(combCoord(c-1,1),combCoord(c-1,2)))
- end
- end
- switch avType
- case 1 % grand averages
- hold on
- switch inclCtrl
- case {1,2}
- switch plotDifI
- case 0 % plot control response only when difference curve is deactivated
- % plot standard error
- seHiCtrl = grAvCtrl(timeCut,filt)+seCtrl(timeCut,filt);
- seLoCtrl = grAvCtrl(timeCut,filt)-seCtrl(timeCut,filt);
- seX = [timetr(timeCut),fliplr(timetr(timeCut))];
- seY = [seHiCtrl',fliplr(seLoCtrl')];
- patch(seX,seY,colCtrl,'FaceAlpha',0.2,'EdgeColor','none')
- % plot data
- plotCtrl = plot(timetr(timeCut),grAvCtrl(timeCut,filt),'color',colCtrl,'Linewidth',2);
- end
- case 3
- switch plotDifI
- case 0 % plot control response only when difference curve is deactivated
- % plot standard error
- seHi50Per = grAv50Per(timeCut,filt)+se50Per(timeCut,filt);
- seLo50Per = grAv50Per(timeCut,filt)-se50Per(timeCut,filt);
- seX = [timetr(timeCut),fliplr(timetr(timeCut))];
- seY = [seHi50Per',fliplr(seLo50Per')];
- patch(seX,seY,col50Per,'FaceAlpha',0.2,'EdgeColor','none')
- % plot data
- plot50Per = plot(timetr(timeCut),grAv50Per(timeCut,filt),'color',col50Per,'Linewidth',2);
- % plot standard error
- seHiMR = grAvMR(timeCut,filt)+seMR(timeCut,filt);
- seLoMR = grAvMR(timeCut,filt)-seMR(timeCut,filt);
- seX = [timetr(timeCut),fliplr(timetr(timeCut))];
- seY = [seHiMR',fliplr(seLoMR')];
- patch(seX,seY,colMR,'FaceAlpha',0.2,'EdgeColor','none')
- % plot data
- plotMR = plot(timetr(timeCut),grAvMR(timeCut,filt),'color',colMR,'Linewidth',2);
- end
- end
- % plot standard error
- seHiDev = grAvDev(timeCut,filt)+seDev(timeCut,filt);
- seLoDev = grAvDev(timeCut,filt)-seDev(timeCut,filt);
- seX = [timetr(timeCut),fliplr(timetr(timeCut))];
- seY = [seHiDev',fliplr(seLoDev')];
- patch(seX,seY,colDev,'FaceAlpha',0.2,'EdgeColor','none')
- % plot data
- plotDev = plot(timetr(timeCut),grAvDev(timeCut,filt),'color',colDev,'Linewidth',2);
- % plot standard error
- seHiStd = grAvStd(timeCut,filt)+seStd(timeCut,filt);
- seLoStd = grAvStd(timeCut,filt)-seStd(timeCut,filt);
- seX = [timetr(timeCut),fliplr(timetr(timeCut))];
- seY = [seHiStd',fliplr(seLoStd')];
- patch(seX,seY,colStd,'FaceAlpha',0.2,'EdgeColor','none')
- % plot data
- plotStd = plot(timetr(timeCut),grAvStd(timeCut,filt),'color',colStd,'Linewidth',2);
- xticks(timeWin(1):5:timeWin(2))
- set(gca,'XTickLabel',timeStart:5:timeEnd)
- switch stimMark
- case 1 % plot bar
- y_dist = y_lim(2)-y_lim(1);
- y_min = y_lim(1)+y_dist*0.05;
- x_stim = [stimWin(1);stimWin(2);stimWin(2);stimWin(1)];
- y_stim = [y_min+y_dist*0.05;y_min+y_dist*0.05;y_min+y_dist*0.07;y_min+y_dist*0.07];
- patch('XData',x_stim,'YData',y_stim,'EdgeColor','Black','EdgeAlpha',1,'FaceColor','Black','FaceAlpha',1)
- end
- switch plotMtrxI
- case 0
- xlabel('Time [ms]','FontWeight','bold','FontSize',20)
- ylabel(ylableName,'FontWeight','bold','FontSize',20)
- switch inclCtrl
- case 0
- legend([plotDev,plotStd],nameDev,nameStd,'Location','northwest','AutoUpdate','off')
- case {1,2}
- switch plotDifI
- case 0
- legend([plotDev,plotStd,plotCtrl],nameDev,nameStd,nameCtrl,'Location','northwest','AutoUpdate','off')
- case 1
- legend([plotDev,plotStd],nameDev,nameStd,'Location','northwest','AutoUpdate','off')
- end
- case 3
- switch plotDifI
- case 0
- legend([plotDev,plotStd,plot50Per,plotMR],nameDev,nameStd,name50Per,nameMR,'Location','northwest','AutoUpdate','off')
- case 1
- legend([plotDev,plotStd],nameDev,nameStd,'Location','northwest','AutoUpdate','off')
- end
- end
- case 1
- xlabel(t,'Time [ms]','FontWeight','bold','FontSize',20)
- ylabel(t,ylableName,'FontWeight','bold','FontSize',20)
- end
- set(gca,'FontSize',20,'Linewidth',2,'FontName','Arial')
- switch plotWinI
- case 1
- x_min = timetr(winAll(:,1));
- x_max = timetr(winAll(:,2));
- x = [x_min;x_max;x_max;x_min];
- switch fixedY
- case 0
- y_limAuto = ylim;
- y_min = y_limAuto(1);
- y_max = y_limAuto(2);
- case 1
- y_min = y_lim(1);
- y_max = y_lim(2);
- end
- y_temp = [y_min;y_min;y_max;y_max];
- y = repmat(y_temp,1,uWin(end));
- for w = uWin
- switch inclCtrl
- case 0
- statsV = pV(c,s,filt,w);
- case {1,2,3}
- switch statsType
- case 1 % use t-test statistics
- statsV = pV(c,s,filt,w);
- case 2 % use ANOVA statistics
- statsV = multcompV{c,s,filt,w}.pValue(1); % extract pValue for comparison between dev and std condition
- end
- end
- if statsV<0.05
- sigWin = patch('XData',x(:,w),'YData',y(:,w),'EdgeColor','black','EdgeAlpha',1,'FaceColor','black','FaceAlpha',.2,'Linewidth',2);
- else
- sigWin = patch('XData',x(:,w),'YData',y(:,w),'EdgeColor','black','EdgeAlpha',1,'FaceColor','none','Linewidth',2);
- end
- uistack(sigWin,'bottom')
- end
- end
- xlim([timeWin(1),timeWin(2)])
- if fixedY==1
- ylim(y_lim)
- end
- case 2 % individual averages
- for f = 1:nFiles
- figure ('NumberTitle','off','Name',[combName{c},'_',stimName,'_',convertStringsToChars(recID(f))],'Position',[0,0,1000,500])
- hold on
- switch inclCtrl
- case {1,2}
- switch plotDifI
- case 0 % plot control response only when difference curve is deactivated
- plotCtrl = plot(timetr(timeCut),avCtrl(timeCut,f,filt),'color',colCtrl,'Linewidth',2);
- end
- case 3
- switch plotDifI
- case 0 % plot control response only when difference curve is deactivated
- plot50Per = plot(timetr(timeCut),av50Per(timeCut,f,filt),'color',col50Per,'Linewidth',2);
- plotMR = plot(timetr(timeCut),avMR(timeCut,f,filt),'color',colMR,'Linewidth',2);
- end
- end
- plotStd = plot(timetr(timeCut),avStd(timeCut,f,filt),'color',colStd,'Linewidth',2);
- plotDev = plot(timetr(timeCut),avDev(timeCut,f,filt),'color',colDev,'Linewidth',2);
- xticks(timeWin(1):5:timeWin(2))
- set(gca,'XTickLabel',timeStart:5:timeEnd)
- switch stimMark
- case 1 % plot bar
- y_dist = y_lim(2)-y_lim(1);
- y_min = y_lim(1)+y_dist*0.05;
- x_stim = [stimWin(1);stimWin(2);stimWin(2);stimWin(1)];
- y_stim = [y_min+y_dist*0.05;y_min+y_dist*0.05;y_min+y_dist*0.07;y_min+y_dist*0.07];
- patch('XData',x_stim,'YData',y_stim,'EdgeColor','Black','EdgeAlpha',1,'FaceColor','Black','FaceAlpha',1)
- end
- xlabel('Time [ms]','FontWeight','bold','FontSize',20)
- ylabel(ylableName,'FontWeight','bold','FontSize',20)
- set(gca,'FontSize',20,'Linewidth',2,'FontName','Arial')
- xlim([timeWin(1),timeWin(2)])
- if fixedY==1
- ylim(y_lim)
- end
- end
- end
- if saveI==1
- switch plotMtrxI
- case 0
- saveas(gcf,[combName{c},'_',stimName,'_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.jpg'])
- saveas(gcf,[combName{c},'_',stimName,'_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.svg'])
- end
- end
- end
- end
- if saveI==1
- switch plotMtrxI
- case 1
- saveas(gcf,['Matrix_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.jpg'])
- saveas(gcf,['Matrix_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.svg'])
- end
- end
- end
- %% plotting: data-heatmap
- if plotHmI==1
- % do some prior calculations
- rgb1 = [(0:0.01:1),ones(1,101)]';
- rgb2 = [(0:0.01:1),(1:-0.01:0)]';
- rgb3 = [ones(1,101),(1:-0.01:0)]';
- cMap = [rgb1,rgb2,rgb3];
- % create matrix containing the data of interest
- hmMtrx = NaN(nStim,nStim);
- for c = cStart:nComb
- for s = 1:2
- for w = uWin
- switch hmDataI
- case 1
- data = round(cohensD_V(c,s,filt,w,1),2); % Cohen's D of comparison between dev and std responses
- case 2
- data = round(rmsGrAv{c}(s,3,filt,w),2); % grand average RMS values of control response
- end
- switch s % mirror coordinats with s
- case 1
- hmMtrx(tileMtrx(combCoord(c-1,1),combCoord(c-1,2))) = data; % ATTENTION: coordinates change with s in the opposite way as when creating a tiled layout because matrix is filled up from top to bottom while tiled layout is filled from left to right
- case 2
- hmMtrx(tileMtrx(combCoord(c-1,2),combCoord(c-1,1))) = data;
- end
- end
- end
- end
- % create heatmap
- xvalues = stimOrd;
- yvalue = stimOrd;
- figure('NumberTitle','off','Name','Heatmap','Position',[0,0,1450,1300],'Renderer','painters')
- h = heatmap(xvalues,yvalue,hmMtrx);
- % do calculations for heatmap
- cmap = colormap(h);
- sCmap = size(cmap);
- h.Title = 'Cohens D';
- h.XLabel = 'Active Stimulus';
- h.YLabel = 'Modulatory Stimulus';
- h.MissingDataColor = [0.7,0.7,0.7];
- lims = clim;
- hmMax = max(abs(hmMtrx),[],'all');
- switch hmDataI
- case 1
- hmMin = -hmMax;
- h.Colormap = cMap;
- case 2
- hmMin = 0;
- h.Colormap = summer;
- end
- clim([hmMin,hmMax])
- set(gca,'FontSize',20,'FontName','Arial')
- if saveI==1
- saveas(gcf,['Heatmap_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.jpg'])
- saveas(gcf,['Heatmap_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.svg'])
- end
- end
- %% plotting: boxplots
- if plotBpI==1
- switch plotMtrxI
- case 1
- figure('NumberTitle','off','Name','Boxpl_All Stims','Position',[0,0,1500,1300],'Renderer','painters')
- t = tiledlayout(nStim,nStim);
- title(t,'RMS','FontWeight','bold','FontSize',25)
- end
- switch inclCtrl
- case 0
- xDev = [1,4,7,10,13];
- xStd = [2,5,8,11,14];
- sig_groups = {[1,2],[4,5],[7,8],[10,11],[13,14]};
- case {1,2}
- xDev = [1,5,9,13,17];
- xStd = [2,6,10,14,18];
- xCtrl = [3,7,11,15,19];
- sig_groups1 = {[1,2],[5,6],[9,10],[13,14],[17,18]}; % dev vs. std
- sig_groups2 = {[1,3],[5,7],[9,11],[13,15],[17,19]}; % dev vs. ctrl
- sig_groups3 = {[2,3],[6,7],[10,11],[14,15],[18,19]}; % std vs. ctrl
- case 3
- xDev = [1,6,11,16,21];
- xStd = [2,7,12,17,22];
- x50Per = [3,8,13,18,23];
- xMR = [4,9,14,19,24];
- sig_groups1 = {[1,2],[6,7],[11,12],[16,17],[21,22]}; % dev vs. std
- sig_groups2 = {[1,3],[6,8],[11,13],[16,18],[21,23]}; % dev vs. 50Per
- sig_groups3 = {[1,4],[6,9],[11,14],[16,19],[21,24]}; % dev vs. MR
- sig_groups4 = {[2,3],[7,8],[12,13],[17,18],[22,23]}; % 50Per vs. std
- sig_groups5 = {[2,4],[7,9],[12,14],[17,19],[22,24]}; % MR vs. std
- sig_groups6 = {[3,4],[8,9],[13,14],[18,19],[23,24]}; % MR vs. 50Per
- end
- for c = cStart:nComb % run once for each stimulus combination
- for s = 1:2 % once for A, once for B
- switch s
- case 1
- stimName = 'A';
- case 2
- stimName = 'B';
- end
- rmsMin = floor(min(rmsV{c}(:,s,:,filt,:),[],'all')); % identify minimum RMS value for y-limit
- rmsMax = ceil(max(rmsV{c}(:,s,:,filt,:),[],'all')); % identify maximum RMS value for y-limit
- switch plotMtrxI
- case 0
- figure('NumberTitle','off','Name',['Boxpl_',combName{c},'_',stimName],'Position',[0,0,boxpFigWi,400])
- title('RMS')
- case 1
- switch s % mirror coordinats with s
- case 1
- nexttile(tileMtrx(combCoord(c-1,2),combCoord(c-1,1)))
- case 2
- nexttile(tileMtrx(combCoord(c-1,1),combCoord(c-1,2)))
- end
- end
- ylim([rmsMin-0.5,rmsMax+1])
- for w = uWin
- hold on
- boxDev = boxchart(xDev(w)*ones(size(rmsV{c}(:,s,1,filt,w))),rmsV{c}(:,s,1,filt,w),'BoxFaceColor',colDev,'MarkerColor',colDev,'Linewidth',2);
- boxStd = boxchart(xStd(w)*ones(size(rmsV{c}(:,s,2,filt,w))),rmsV{c}(:,s,2,filt,w),'BoxFaceColor',colStd,'MarkerColor',colStd,'Linewidth',2);
- % switch inclCtrl
- % case 0
- % H = sigstar(sig_groups{w},pV(c,s,filt,w),cohensD_V(c,s,filt,w,1));
- % case {1,2}
- % boxCtrl = boxchart(xCtrl(w)*ones(size(rmsV{c}(:,s,3,filt,w))),rmsV{c}(:,s,3,filt,w),'BoxFaceColor',colCtrl,'MarkerColor',colCtrl,'Linewidth',2);
- % switch statsType
- % case 1
- % H = sigstar(sig_groups1{w},pV(c,s,filt,w),cohensD_V(c,s,filt,w,1));
- % case 2
- % statsV = multcompV{c,s,filt,w}.pValue([1,2,4]);
- % eS = zeros(3,1);
- % for cmp = 1:3
- % eS(cmp) = cohensD_V(c,s,filt,w,cmp);
- % end
- % H = sigstar({sig_groups1{w},sig_groups2{w},sig_groups3{w}},statsV,eS);
- % end
- % case 3
- % box50Per = boxchart(x50Per(w)*ones(size(rmsV{c}(:,s,3,filt,w))),rmsV{c}(:,s,3,filt,w),'BoxFaceColor',col50Per,'MarkerColor',col50Per,'Linewidth',2);
- % boxMR = boxchart(xMR(w)*ones(size(rmsV{c}(:,s,4,filt,w))),rmsV{c}(:,s,4,filt,w),'BoxFaceColor',colMR,'MarkerColor',colMR,'Linewidth',2);
- % switch statsType
- % case 1
- % H = sigstar(sig_groups1{w},pV(c,s,filt,w),cohensD_V(c,s,filt,w,1));
- % case 2
- % statsV = multcompV{c,s,filt,w}.pValue([1,2,3,5,6,9]);
- % eS = zeros(6,1);
- % for cmp = 1:6
- % eS(cmp) = cohensD_V(c,s,filt,w,cmp);
- % end
- % H = sigstar({sig_groups1{w},sig_groups2{w},sig_groups3{w},sig_groups4{w},sig_groups5{w},sig_groups6{w}},statsV,eS);
- % end
- % end
- set(H(:,2),'FontSize',25,'FontName','Arial')
- end
- switch inclCtrl
- case 0
- xlim([xDev(uWin(1))-1,xStd(uWin(end))+1])
- xticks((xDev(uWin)+xStd(uWin))/2)
- % legend([boxDev,boxStd],nameDev,nameStd,'Location','northwest','AutoUpdate','off')
- case {1,2}
- xlim([xDev(uWin(1))-1,xCtrl(uWin(end))+1])
- xticks(xStd(uWin))
- % legend([boxDev,boxStd,boxCtrl],nameDev,nameStd,nameCtrl,'Location','northwest','AutoUpdate','off')
- case 3
- xlim([xDev(uWin(1))-1,xMR(uWin(end))+1])
- xticks((xStd(uWin)+x50Per(uWin))/2)
- % legend([boxDev,boxStd,box50Per,boxMR],nameDev,nameStd,name50Per,nameMR,'Location','northwest','AutoUpdate','off')
- end
- switch plotMtrxI
- case 0
- ylabel(ylableName,'FontWeight','bold','FontSize',20)
- xticklabels(winTxt(uWin))
- case 1
- ylabel(t,ylableName,'FontWeight','bold','FontSize',20)
- xticks([])
- ylim([0,15])
- end
- set(gca,'FontSize',25,'Linewidth',2,'FontName','Arial')
- if saveI==1
- switch plotMtrxI
- case 0
- saveas(gcf,['Boxp_',combName{c},'_',stimName,'_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.jpg'])
- saveas(gcf,['Boxp_',combName{c},'_',stimName,'_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.svg'])
- end
- end
- end
- end
- if saveI==1
- switch plotMtrxI
- case 1
- saveas(gcf,['Boxpl_Matrix_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.jpg'])
- saveas(gcf,['Boxpl_Matrix_',filtName,'_cutTime',num2str(cutTime),'_ctrl',num2str(inclCtrl),'.svg'])
- end
- end
- end
|