diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/displot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,514 @@
+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
\ No newline at end of file