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