wolffd@0: function res = displot(x,y,xlab,ylab,t,fp,pp,tp,tv,ch,multidata,pm,ap,rp,cl) wolffd@0: % graphical display of any data (except mirscalar data) computed by MIRToolbox wolffd@0: wolffd@0: %opengl('OpenGLWobbleTesselatorBug',1) wolffd@0: % Rendering complex patch object may cause segmentation violation and wolffd@0: % return a tesselator error message in the stack trace. This command wolffd@0: % enables a workaround of that bug that might work sometimes... wolffd@0: wolffd@0: if isempty(y) wolffd@0: res = 0; wolffd@0: return wolffd@0: end wolffd@0: manychannels = 0; wolffd@0: y1 = y{1}; wolffd@0: if length(y) == 1 wolffd@0: y = y{1}; wolffd@0: if length(x) == 1 wolffd@0: x = x{1}; wolffd@0: end wolffd@0: end wolffd@0: if isempty(y) wolffd@0: res = 0; wolffd@0: return wolffd@0: end wolffd@0: wolffd@0: if isstruct(cl) wolffd@0: y = cl.centr(:,cl.index); wolffd@0: end wolffd@0: wolffd@0: figure wolffd@0: fp2 = uncell(fp); wolffd@0: c = size(y,2); wolffd@0: lx = size(y,1); wolffd@0: l = size(y1,3); % Number of channels wolffd@0: il = (1-0.15)/l; wolffd@0: wolffd@0: if iscell(y) wolffd@0: if size(y{1},3) > 1 && size(y{1},1) == 1 wolffd@0: for j = 1:c wolffd@0: y{j} = reshape(y{j},size(y{j},2),size(y{j},3)); wolffd@0: y{j} = y{j}'; wolffd@0: end wolffd@0: lx = l; wolffd@0: l = 1; wolffd@0: end wolffd@0: else wolffd@0: if l > 1 && lx == 1 wolffd@0: y = reshape(y,size(y,2),size(y,3)); wolffd@0: y = y'; wolffd@0: x = repmat(ch,[1 size(y,2) size(y,3)]); wolffd@0: lx = l; wolffd@0: l = 1; wolffd@0: end wolffd@0: end wolffd@0: if not(iscell(y)) && l > 20 %&& size(y,3) == 1 wolffd@0: manychannels = 1; wolffd@0: if lx == 1 wolffd@0: y = reshape(y,[c l])'; wolffd@0: lx = l; wolffd@0: l = 1; wolffd@0: else wolffd@0: y = reshape(y,[lx l])'; wolffd@0: fp = reshape(x,[1 lx size(x,3)]); wolffd@0: fp = fp(:,:,1); wolffd@0: fp2 = fp; wolffd@0: c = l; wolffd@0: l = 1; wolffd@0: x = ch'; wolffd@0: end wolffd@0: end wolffd@0: curve = (not(iscell(y)) && not(isequal(fp2,0)) && size(fp2,2)==1) || ... wolffd@0: ...%(iscell(y) && size(y{1}) == 1) || ... wolffd@0: c == 1 || (strcmp(xlab,'time (s)') && not(manychannels)); wolffd@0: if curve wolffd@0: for i = 1:l wolffd@0: if l>1 wolffd@0: subplot(l,1,l-i+1,'align'); wolffd@0: end wolffd@0: if not(iscell(y)) wolffd@0: y = {y}; wolffd@0: x = {x}; wolffd@0: end wolffd@0: col = cell(length(y)); wolffd@0: for h = 1:length(y) wolffd@0: col{h} = zeros(size(y{h},2),3,size(y{h},4)); wolffd@0: for j = 1:size(y{h},2) wolffd@0: if ischar(x{h}) wolffd@0: xj = x{h}; wolffd@0: else wolffd@0: xj = x{h}(:,j); wolffd@0: end wolffd@0: yj = y{h}(:,j,i,:); wolffd@0: lk = size(yj,4); wolffd@0: for k = 1:lk wolffd@0: if c > 1 wolffd@0: col{h}(j,:,k) = rand(1,3); wolffd@0: else wolffd@0: col{h}(j,:,k) = num2col(k); wolffd@0: end wolffd@0: yk = yj(:,:,:,k); wolffd@0: if not(isempty(yk)) wolffd@0: if iscell(xj) wolffd@0: lj = length(xj); wolffd@0: abs = 0:lj-1; wolffd@0: elseif ischar(xj) wolffd@0: abs = 1:length(yk); wolffd@0: else wolffd@0: abs = xj; wolffd@0: end wolffd@0: if length(abs) < 20 && lk == 1 && c == 1 wolffd@0: bar(abs,yk); wolffd@0: else wolffd@0: plot(abs,yk,'Color',col{h}(j,:,k)); wolffd@0: end wolffd@0: if iscell(xj) wolffd@0: tick = 0:ceil(lj/14):lj-1; wolffd@0: set(gca,'xtick',tick); wolffd@0: set(gca,'xticklabel',xj(tick+1)); wolffd@0: elseif ischar(xj) wolffd@0: set(gca,'xticklabel',x); wolffd@0: end wolffd@0: hold on wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if length(y) > 1 wolffd@0: if isempty(cl)% || isempty(cl{1}) ... this because of a bug.. wolffd@0: %|| isempty(cl{i}) wolffd@0: colr = h; wolffd@0: %elseif iscell(cl{i}) wolffd@0: % colr = cl{i}(h); wolffd@0: elseif length(cl) == 1 wolffd@0: colr = cl; wolffd@0: else wolffd@0: colr = cl(h); %cl{i}(h); wolffd@0: end wolffd@0: if not(isempty(x{h})) wolffd@0: rectangle('Position',[x{h}(1),... wolffd@0: min(min(y{h}(:,:,i))),... wolffd@0: x{h}(end)-x{h}(1),... wolffd@0: max(max(y{h}(:,:,i)))-... wolffd@0: min(min(y{h}(:,:,i)))]+1e-16,... wolffd@0: 'EdgeColor',num2col(colr),'Curvature',.1,'LineWidth',1) wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if not(isempty(multidata)) wolffd@0: legend(multidata{:},'Location','Best') wolffd@0: end wolffd@0: for h = 1:length(y) wolffd@0: for j = 1:size(y{h},2) wolffd@0: xj = x{h}(:,j); wolffd@0: yj = y{h}(:,j,i,:); wolffd@0: lk = size(yj,4); wolffd@0: for k = 1:lk wolffd@0: yk = yj(:,:,:,k); wolffd@0: if not(isempty(yk)) wolffd@0: if size(y{h},2) > 1 wolffd@0: rectangle('Position',[xj(1),min(yk),... wolffd@0: xj(end)-xj(1),max(yk)-min(yk)]+1e-16,... wolffd@0: 'EdgeColor',col{h}(j,:,k)) wolffd@0: end wolffd@0: if not(isempty(pp)) && not(isempty(pp{1})) wolffd@0: [ppj order] = sort(pp{h}{1,j,i}); wolffd@0: if not(isempty(pm)) && not(isempty(pm{1})) wolffd@0: pmj = pm{h}{1,j,i}(order); wolffd@0: [R C] = find(pmj==k); wolffd@0: if iscell(xj) wolffd@0: plot(ppj(R,C)-1,yk(ppj(R,C)),'or') wolffd@0: else wolffd@0: plot(xj(ppj(R,C)),yk(ppj(R,C)),'or') wolffd@0: end wolffd@0: else wolffd@0: if lk > 1 wolffd@0: [R C] = find(ppj(:,:,2)==k); wolffd@0: plot(xj(ppj(R,C)),yk(ppj(R,C)),'or') wolffd@0: else wolffd@0: plot(xj(ppj),yk(ppj),'or') wolffd@0: end wolffd@0: end wolffd@0: if not(isempty(ap)) && not(isempty(ap{1})) wolffd@0: apj = ap{h}{1,j,i}; wolffd@0: plot(xj(apj),yk(apj),'dr') wolffd@0: for g = 1:length(apj) wolffd@0: line([xj(ppj(g)),xj(apj(g))],... wolffd@0: [yk(ppj(g)),yk(apj(g))],... wolffd@0: 'Color','r') wolffd@0: end wolffd@0: end wolffd@0: if not(isempty(rp)) && not(isempty(rp{1})) wolffd@0: rpj = rp{h}{1,j,i}; wolffd@0: plot(xj(rpj),yk(rpj),'dr') wolffd@0: for g = 1:length(rpj) wolffd@0: line([xj(ppj(g)),xj(rpj(g))],... wolffd@0: [yk(ppj(g)),yk(rpj(g))],... wolffd@0: 'Color','r') wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if i == l wolffd@0: title(t) wolffd@0: end wolffd@0: if i == 1 wolffd@0: xlabel(xlab) wolffd@0: end wolffd@0: if l > 1 wolffd@0: %if iscell(x) wolffd@0: % num = x{i}(1); wolffd@0: %else wolffd@0: num = ch(i); wolffd@0: %end wolffd@0: pos = get(gca,'Position'); wolffd@0: axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],'Visible','off'); wolffd@0: text(0,0,num2str(num),'FontSize',12,'Color','r') wolffd@0: end wolffd@0: end wolffd@0: else wolffd@0: % 2-dimensional image wolffd@0: displayseg = 0; wolffd@0: if iscell(x) && ischar(x{1}) wolffd@0: if size(y,4) > 1 || size(y,1) > size(x,1) wolffd@0: ticky = 0.5:23.5; wolffd@0: tickylab = {'CM','C#M','DM','D#M','EM','FM','F#M',... wolffd@0: 'GM','G#M','AM','A#M','BM','Cm','C#m','Dm','D#m','Em',... wolffd@0: 'Fm','F#m','Gm','G#m','Am','A#m','Bm'}; wolffd@0: else wolffd@0: ticky = (1:size(x,1))'; wolffd@0: tickylab = x; wolffd@0: displayseg = 1; wolffd@0: end wolffd@0: x = (1:size(y,1))'; wolffd@0: elseif iscell(x) && iscell(x{1}) && ischar(x{1}{1}) wolffd@0: if size(y{1},4) > 1 wolffd@0: ticky = 0.5:23.5; wolffd@0: tickylab = {'CM','C#M','DM','D#M','EM','FM','F#M',... wolffd@0: 'GM','G#M','AM','A#M','BM','Cm','C#m','Dm','D#m','Em',... wolffd@0: 'Fm','F#m','Gm','G#m','Am','A#m','Bm'}; wolffd@0: else wolffd@0: ticky = (1:size(x{1},1))'; wolffd@0: tickylab = x{1}; wolffd@0: displayseg = 1; wolffd@0: end wolffd@0: for i = 1:length(x) wolffd@0: x{i} = (1:size(x{i},1))'; wolffd@0: end wolffd@0: else wolffd@0: ticky = []; wolffd@0: end wolffd@0: if iscell(y) wolffd@0: displayseg = 1; wolffd@0: for i = 1:l wolffd@0: if l>1 wolffd@0: subplot(l,1,l-i+1,'align'); wolffd@0: % subplot('Position',[0.1 (i-1)*il+0.1 0.89 il-0.02]) wolffd@0: end wolffd@0: hold on wolffd@0: %surfplot(segt,x{1},repmat(x{1}/x{1}(end)*.1,[1,length(segt)])); wolffd@0: if length(x)==1 && length(y)>1 wolffd@0: for k = 2:length(y) wolffd@0: x{k} = x{1}; wolffd@0: end wolffd@0: end wolffd@0: for j = 1:length(x) wolffd@0: if length(x{j}) > 1 wolffd@0: if size(x{j},1) == 1 && size(x{j},3) > 1 wolffd@0: x{j} = reshape(x{j},size(x{j},2),size(x{j},3))'; wolffd@0: mel = 1; wolffd@0: else wolffd@0: mel = 0; wolffd@0: end wolffd@0: xx = zeros(size(x{j},1)*size(y{j},4),1); %,size(x{j},2)); wolffd@0: yy = zeros(size(y{j},1)*size(y{j},4),size(y{j},2)); wolffd@0: for k = 1:size(y{j},4) wolffd@0: xx((k-1)*size(x{j},1)+1:k*size(x{j},1),1) = x{j}(:,1); wolffd@0: yy((k-1)*size(y{j},1)+1:k*size(y{j},1),:) = y{j}(:,:,i,k); wolffd@0: end wolffd@0: if size(y{j},4) == 1 && not(mel) wolffd@0: xxx = [1.5*xx(1,1)-0.5*xx(2,1);... wolffd@0: (xx(1:end-1)+xx(2:end))/2;... wolffd@0: 1.5*xx(end,1)-0.5*xx(end-1,1)]; wolffd@0: else wolffd@0: xxx = (0:size(yy,1))'; wolffd@0: end wolffd@0: if size(fp{j},2) > 1 wolffd@0: segt = [fp{j}(1,1),... wolffd@0: mean([fp{j}(2,1:end-1);fp{j}(1,2:end)]),... wolffd@0: fp{j}(2,end)]; wolffd@0: else wolffd@0: segt = fp{j}'; wolffd@0: end wolffd@0: surfplot(segt,xxx,yy(:,:)); wolffd@0: if not(isempty(ticky)) wolffd@0: set(gca,'ytick',ticky); wolffd@0: set(gca,'yticklabel',tickylab); wolffd@0: end wolffd@0: set(gca,'YDir','normal') wolffd@0: if (exist('pp') == 1) && not(isempty(pp)) wolffd@0: if not(isempty(pp{j})) wolffd@0: for k = 1:length(pp{j}) wolffd@0: ppj = pp{j}{k}; wolffd@0: if size(ppj,3) == 2 wolffd@0: ppj(:,:,1) = ppj(:,:,1) + (ppj(:,:,2)-1)*size(x,1); wolffd@0: ppj(:,:,2) = []; wolffd@0: plot(mean(fp{j}(:,k)),ppj-.5,'+w') wolffd@0: elseif 0 %(exist('pm') == 1) && not(isempty(pm)) wolffd@0: pmj = pm{k}{1,1,i}; wolffd@0: ppj(:,:) = ppj(:,:) + (pmj(:,:)-1)*size(x,1); wolffd@0: plot(mean(fp{j}(:,k)),ppj-.5,'+w') % fp shows segmentation points wolffd@0: elseif not(isempty(ppj)) wolffd@0: plot(mean(fp{j}(:,k)),xx(ppj),'+k') wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if i == l wolffd@0: title(t) wolffd@0: end wolffd@0: if i == 1 wolffd@0: if manychannels wolffd@0: xlabel(xlab); wolffd@0: elseif displayseg wolffd@0: xlabel('time axis (in s.)'); wolffd@0: else wolffd@0: xlabel('temporal location of beginning of frame (in s.)'); wolffd@0: end wolffd@0: end wolffd@0: if l > 1 wolffd@0: num = ch(i); wolffd@0: pos = get(gca,'Position'); wolffd@0: axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],'Visible','off'); wolffd@0: text(0,0,num2str(num),'FontSize',12,'Color','r') wolffd@0: end wolffd@0: end wolffd@0: y = y{1}; wolffd@0: else wolffd@0: mel = 0; wolffd@0: if iscell(x) wolffd@0: x = x{1}; wolffd@0: end wolffd@0: if size(x,1) == 1 && size(y,1) > 1 wolffd@0: if size(x,3) == 1 wolffd@0: x = x'; wolffd@0: else wolffd@0: mel = 1; wolffd@0: end wolffd@0: end wolffd@0: if not(isempty(pp)) && iscell(pp{1}) wolffd@0: pp = pp{1}; wolffd@0: pm = pm{1}; wolffd@0: end wolffd@0: for i = 1:l wolffd@0: if l>1 wolffd@0: subplot('Position',[0.1 (i-1)*il+0.1 0.89 il-0.02]) wolffd@0: end wolffd@0: xx = zeros(size(x,1)*size(y,4),1); %,size(x,2)); wolffd@0: yy = zeros(size(y,1)*size(y,4),size(y,2)); wolffd@0: for k = 1:size(y,4) wolffd@0: xx((k-1)*size(x,1)+1:k*size(x,1),1) = x(:,1); wolffd@0: yy((k-1)*size(y,1)+1:k*size(y,1),:) = y(:,:,i,k); wolffd@0: end wolffd@0: if iscell(fp) wolffd@0: fp = uncell(fp); wolffd@0: end wolffd@0: lx = length(xx); wolffd@0: if lx < 6 wolffd@0: curve = 1; wolffd@0: ttt = (fp(1,:)+fp(2,:))/2; wolffd@0: plot(ttt,yy) wolffd@0: if i == 1 wolffd@0: legdata = cell(1,lx); wolffd@0: if strcmp(xlab(end),'s') wolffd@0: xlab(end) = []; wolffd@0: end wolffd@0: for j = 1:lx wolffd@0: legdata{j} = [xlab,' ',num2str(j)]; wolffd@0: end wolffd@0: legend(legdata) wolffd@0: end wolffd@0: else wolffd@0: ttt = [fp(1,:) 2*fp(1,end)-fp(1,end-1)]; wolffd@0: if size(y,4) == 1 && not(mel) wolffd@0: xxx = [1.5*xx(1)-0.5*xx(2);... wolffd@0: (xx(1:end-1)+xx(2:end))/2;... wolffd@0: 1.5*xx(end)-0.5*xx(end-1)]; wolffd@0: else wolffd@0: xxx = (0:size(yy,1))'; wolffd@0: end wolffd@0: surfplot(ttt,xxx,yy); wolffd@0: if not(isempty(ticky)) wolffd@0: set(gca,'ytick',ticky); wolffd@0: set(gca,'yticklabel',tickylab); wolffd@0: end wolffd@0: set(gca,'YDir','normal'); wolffd@0: end wolffd@0: hold on wolffd@0: %if iscell(pp) wolffd@0: % pp = uncell(pp); wolffd@0: % if iscell(pm) wolffd@0: % pm = uncell(pm); wolffd@0: % end wolffd@0: %end wolffd@0: if (exist('tp') == 1) && not(isempty(tp)) wolffd@0: tp = tp{i}{1}; wolffd@0: tv = tv{i}{1}; wolffd@0: for k = 1:size(tp,1) wolffd@0: prej = 0; wolffd@0: for j = 1:size(tp,2) wolffd@0: if tv(k,j) wolffd@0: if prej% && not(isempty(tp(k,j))) wolffd@0: plot([(ttt(prej)+ttt(prej+1))/2,... wolffd@0: (ttt(j)+ttt(j+1))/2],... wolffd@0: [(xxx(tp(k,prej))+xxx(tp(k,prej)+1))/2,... wolffd@0: (xxx(tp(k,j))+xxx(tp(k,j)+1))/2],... wolffd@0: 'k','LineWidth',1) wolffd@0: plot([(ttt(prej)+ttt(prej+1))/2,... wolffd@0: (ttt(j)+ttt(j+1))/2],... wolffd@0: [(xxx(tp(k,prej))+xxx(tp(k,prej)+1))/2,... wolffd@0: (xxx(tp(k,j))+xxx(tp(k,j)+1))/2],... wolffd@0: 'w+','MarkerSize',10) wolffd@0: plot([(ttt(prej)+ttt(prej+1))/2,... wolffd@0: (ttt(j)+ttt(j+1))/2],... wolffd@0: [(xxx(tp(k,prej))+xxx(tp(k,prej)+1))/2,... wolffd@0: (xxx(tp(k,j))+xxx(tp(k,j)+1))/2],... wolffd@0: 'kx','MarkerSize',10) wolffd@0: end wolffd@0: prej = j; wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: elseif (exist('pp') == 1) && not(isempty(pp)) wolffd@0: if size(pp,3) == l wolffd@0: for j = 1:size(pp,2) wolffd@0: ppj = pp{1,j,i}; wolffd@0: if (exist('pm') == 1) wolffd@0: pmj = pm{1,j,i}; wolffd@0: else wolffd@0: pmj = []; wolffd@0: end wolffd@0: if iscell(ppj) wolffd@0: ppj = uncell(ppj); wolffd@0: if iscell(pmj) wolffd@0: pmj = uncell(pmj); wolffd@0: end wolffd@0: end wolffd@0: if size(ppj,3) == 2 wolffd@0: ppj(:,:,1) = ppj(:,:,1) + (ppj(:,:,2)-1)*size(x,1); wolffd@0: ppj(:,:,2) = []; wolffd@0: %plot((fp(1,j)+fp(2,j))/2,ppj-.5,'+w') wolffd@0: plot((ttt(j)+ttt(j+1))/2,(xxx(ppj)+xxx(ppj+1))/2,'+w') wolffd@0: else wolffd@0: if not(isempty(pmj)) wolffd@0: ppj(:,:,:) = ppj(:,:,:) + (pmj(:,:,:)-1)*size(x,1); wolffd@0: end wolffd@0: if not(isempty(ppj)) wolffd@0: %plot((segt(j)+segt(j+1))/2,xx(ppj),'+k','MarkerSize',10) wolffd@0: plot((ttt(j)+ttt(j+1))/2,(xxx(ppj)+xxx(ppj+1))/2,'+w','MarkerSize',10) wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: else wolffd@0: for j = 1:size(pp,3) wolffd@0: ppj = pp{1,1,j}; wolffd@0: if (exist('pm') == 1) wolffd@0: pmj = pm{1,1,j}; wolffd@0: else wolffd@0: pmj = []; wolffd@0: end wolffd@0: if not(isempty(ppj)) wolffd@0: %plot((segt(j)+segt(j+1))/2,xx(ppj),'+k','MarkerSize',10) wolffd@0: plot((ttt(ppj)+ttt(ppj+1))/2,(xxx(j)+xxx(j+1))/2,'+w','MarkerSize',10) wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if i == l wolffd@0: title(t) wolffd@0: end wolffd@0: if i == 1 wolffd@0: xlabel('time axis (in s.)'); wolffd@0: end wolffd@0: if l > 1 wolffd@0: if iscell(x) wolffd@0: num = x{i}(1); wolffd@0: else wolffd@0: num = ch(i); wolffd@0: end wolffd@0: pos = get(gca,'Position'); wolffd@0: hfig = axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],'Visible','off'); wolffd@0: text(0,0,num2str(num),'FontSize',12,'Color','r') wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: if l == 1 wolffd@0: if curve wolffd@0: %if (exist('dbv') == 1) && dbv wolffd@0: % ylabel([ylab ' (logarithmic scale)']); wolffd@0: %else wolffd@0: ylabel(ylab); wolffd@0: %end wolffd@0: elseif manychannels wolffd@0: ylabel('Channels'); wolffd@0: else wolffd@0: ylabel(xlab) wolffd@0: end wolffd@0: end wolffd@0: res = 1; wolffd@0: drawnow