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