No BSD License  

Highlights from
uilineshift

image thumbnail
from uilineshift by paul koch
function to shift a selected line (or all other outputs of the PLOT-function) in X and Y-direction

uilineshift(varargin)
% uilineshift()
% function to shift a selected line (or all other outputs of the PLOT-function) in X and Y-direction
% RATIONALE
% =====================
%  this function might be useful for quick and dirty visual inspection of multiple
%  traces or timecourses with a timedelay between or arbitrary x/y-axes or illconditioned overlay
%  of traces
%  - works for all outputs of the 'plot-function' (type is 'line'). Note, plotet dots are also of type line.
%  - The function adds an icon in the menubar of a figure, which than
%    activates the shift-function
%  - if the function is active, a line can be selected and moved within the axis as long as the
%     mousebutton is not released
%  - right mouse button (contextmenu): get the original plot (as long as the icon in the menubar is
%    not deactivated)
% =====================
% HOW TO DO:
% 1]
% plot(something);%plot something
% uilineshift; %adds icon in menubar
% OR 2]
% uilineshift; %adds icon in menubar
% now plot something
% =====================
% EXAMPLE:
%   uilineshift('test'); %3 examples
% ----------------------------------------------------------------------
%                                         Paul S. Koch, BNIC Berlin 2009
% ----------------------------------------------------------------------

function uilineshift(varargin)

% uilineshift('test');
% *******************************************************
% *******************************************************
%examples
% ==========================
if nargin==1
    if strcmp(varargin{1},'test')

        %     uilineshift(2);
        %     uilineshift(3);
        uilineshift(1);
    end
    if varargin{1}==1

        figure('color','w');hold on
        %         plot([1:5],'linewidth',3,'marker','o');
        %         plot([1:2],9:10,'linewidth',3,'marker','o','color','r');
        subplot(2,2,[3 4]);
        hold on
        a=hanning(20);
        imp=round(rand(10,1)*100);
        rest=round(rand(10,1)*100);
        x=[];
        for i=1:length(imp)
            tp=[zeros(rest(i),1); ones(imp(i),1)  ];
            x(end+1:end+length(tp),1)=tp;
        end
        x=x+(rand(size(x,1),1)./3);
        y=conv(x,a);



        %figure('color','w');hold on
        plot( 1:length(x), ((x)-mean(x))./std(x), 'color','k', 'linewidth',1.5);
        plot( 1:length(y), ((y)-mean(y))./std(y), 'color','r', 'linewidth',1.5);
        title('shift traces');
        clear x
        %     elseif varargin{1}==2
        subplot(2,2,1)
        %figure('color','w');
        hold on
        for i=1:5
            plot(rand(10,1), rand(10,1), 'linestyle','none', 'marker','o',...
                'markeredgecolor',rand(3,1) , 'markerfacecolor',rand(3,1));
        end
        ylim([-.5 1.5]); xlim([-.5 1.5]);

        title('move dots');
        subplot(2,2,2)
        image;
        hold on;
        ch= get(gca,'children');
        d=get(ch,'cdata');
        mycmap = get(gcf,'Colormap');
        cla;
        colorbar off;
        %close gcf;
        %   figure('color','w');
        mycmap = mycmap(1:5:end,:);
        hold on
        d1=d-min(d(:));
        d1=round(d1./max(d1(:)).* (size(mycmap,1)-1));

        for i=1:size(mycmap,1)
            [a a2]=deal([]);
            [a a2]=find(d1==i-1);
            plot( a2 ,  a , 'color', mycmap(i,:),'marker','o' ,'LineStyle', 'none',...
                'MarkerFaceColor', mycmap(i,:),'MarkerSize',2.5 );
            % pause
        end
        set(gca,'ydir','reverse');
        xlim([0 100]);
        ylim([0 100]);
        title('move colors');
        %axis off;


    end

end

% ===end example ===================================================================
% =========================================================================
% =========================================================================

% ==================
% define icon pushbutton
% ==================%
x.do=1; %toggle between onOffStates of icon
x.icon =icon;%imagefun

hToolbar = findall(gcf,'Type','uitoolbar');%create icon in toolbar

try
    bb=findall(gcf,'Type','uipushtool','Tag','uilineshift');
    delete(bb);
end

if ~isempty(hToolbar) && isempty(findall(gcf,'Type','uipushtool','Tag','uilineshift'))
    hPush = uipushtool('parent',hToolbar, ...
        'separator','on', ...
        'HandleVisibility','off', ...
        'TooltipString','shift line', ...
        'tag','uilineshift');
    set(hPush,'userdata',x , 'ClickedCallback',  {@update_pushtool,gcf,hPush},...
        'cdata',x.icon(:,:,:,2)  ); %set userdata, callback, iconimage
end% if


q=findall(gcf,'Type','uitoggletool');
set(q,'oncallback','uilineshift');%if another icon is clicked, renew uilineshift-function (e.g. it's deactivated)



% ==================
% if icon pushbutton called
% ==================%
function update_pushtool(cnc1,cnc2,gcf,hPush)
warning off
set(gcf,'WindowButtonupFcn',@figButtonup);
warning on;
%-------------------------------------------------------------------------------
set(findall(gcf,'Type','uitoggletool'),'state','off');%set all other icons 'off'
if ~ishandle(hPush);    return; end% if
x=get(hPush,'userdata');

if x.do==0 % state 'off'
    set(findall(gcf,'Type','uitoggletool'),'state','off');
    img=x.icon(:,:,:,2);%replace image
    set(gcf,'WindowButtonupFcn',[]);%remove callback
    p=findobj(gca,'type','line');
    set(p,'ButtonDownFcn',[]);
    set(gca, 'UIContextMenu', []);% remove contextmenu

else   % state 'on'
    % it state ON, than remember original XY
    activateuimode(gcf,'');
    set(findall(gcf,'Type','uitoggletool'),'state','off');
    ch=findobj(gcf,'type','axes');
    for j=1:length(ch)
        p=findobj(ch(j),'type','line');
        for k = 1:length(p)
            s=get(p(k),'userdata');
            s.xorig=get(p(k),'xdata');
            s.yorig=get(p(k),'ydata');
            set(p(k),'UserData',s);
        end
    end
    img=x.icon(:,:,:,1); %replace image
    update();%UPDATER
    warning off,
    set(gcf,'WindowButtonupFcn',@figButtonup);
    warning on;
    cmenu; %set contextmenu
end%
%
x.do=~x.do;%toggle state
set(hPush,'cdata',img,'userdata',x);%replace image+change userdata

% ==================
% ICONS
% ==================
function img =icon()
c(:,:,1)=[NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN         NaN         NaN         NaN         NaN     0.98824     0.98824         NaN         NaN         NaN         NaN     0.98824     0.98824         NaN         NaN         NaN; NaN         NaN         NaN         NaN     0.98824     0.98824           1           0         NaN         NaN     0.98824         NaN     0.98824     0.98824         NaN         NaN; NaN         NaN         NaN     0.98824     0.98824           0           1           1           0         NaN     0.98824         NaN         NaN     0.98824         NaN         NaN; NaN         NaN         NaN     0.98824         NaN           0           1           1           1     0.98824     0.98824         NaN         NaN     0.98824     0.98824         NaN; NaN         NaN         NaN     0.98824         NaN           0           1           1           1           1           0         NaN         NaN         NaN     0.98824     0.98824; 0.98824         NaN     0.98824     0.98824         NaN           0           1           1           1           1           1           0         NaN         NaN         NaN         NaN; 0.98824     0.98824     0.98824         NaN         NaN           0           1           1           1           1           1           1           0         NaN         NaN         NaN; NaN  NaN  NaN  NaN  NaN    0    1    1    1    1    0    0    0    0  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    1    1    0    1    0  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    1    0    0    1    1    0  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN    0    1    0  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN    0    1    1    0  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    1    0  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN  NaN  NaN];
c(:,:,2)=[NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN         NaN         NaN         NaN         NaN         0.2         0.2         NaN         NaN         NaN         NaN         0.2         0.2         NaN         NaN         NaN; NaN         NaN         NaN         NaN         0.2         0.2           1           0         NaN         NaN         0.2         NaN         0.2         0.2         NaN         NaN; NaN         NaN         NaN         0.2         0.2           0           1           1           0         NaN         0.2         NaN         NaN         0.2         NaN         NaN; NaN         NaN         NaN         0.2         NaN           0           1           1           1         0.2         0.2         NaN         NaN         0.2         0.2         NaN; NaN         NaN         NaN         0.2         NaN           0           1           1           1           1           0         NaN         NaN         NaN         0.2         0.2; 0.2         NaN         0.2         0.2         NaN           0           1           1           1           1           1           0         NaN         NaN         NaN         NaN; 0.2         0.2         0.2         NaN         NaN           0           1           1           1           1           1           1           0         NaN         NaN         NaN; NaN  NaN  NaN  NaN  NaN    0    1    1    1    1    0    0    0    0  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    1    1    0    1    0  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    1    0    0    1    1    0  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN    0    1    0  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN    0    1    1    0  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    1    0  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN  NaN  NaN];
c(:,:,3)=[NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN         NaN         NaN         NaN         NaN    0.027451    0.027451         NaN         NaN         NaN         NaN    0.027451    0.027451         NaN         NaN         NaN; NaN         NaN         NaN         NaN    0.027451    0.027451           1           0         NaN         NaN    0.027451         NaN    0.027451    0.027451         NaN         NaN; NaN         NaN         NaN    0.027451    0.027451           0           1           1           0         NaN    0.027451         NaN         NaN    0.027451         NaN         NaN; NaN         NaN         NaN    0.027451         NaN           0           1           1           1    0.027451    0.027451         NaN         NaN    0.027451    0.027451         NaN; NaN         NaN         NaN    0.027451         NaN           0           1           1           1           1           0         NaN         NaN         NaN    0.027451    0.027451; 0.027451         NaN    0.027451    0.027451         NaN           0           1           1           1           1           1           0         NaN         NaN         NaN         NaN; 0.027451    0.027451    0.027451         NaN         NaN           0           1           1           1           1           1           1           0         NaN         NaN         NaN; NaN  NaN  NaN  NaN  NaN    0    1    1    1    1    0    0    0    0  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    1    1    0    1    0  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    1    0    0    1    1    0  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN    0    1    0  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN    0    1    1    0  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    1    0  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN  NaN  NaN];
img(:,:,:,1) =c;
c(:,:,1)=[NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN         NaN         NaN         NaN         NaN         0.4         0.4         NaN         NaN         NaN         NaN         0.4         0.4         NaN         NaN         NaN; NaN         NaN         NaN         NaN         0.4         0.4     0.38824           0         NaN         NaN         0.4         NaN         0.4         0.4         NaN         NaN; NaN         NaN         NaN         0.4         0.4           0     0.38824     0.38824           0         NaN         0.4         NaN         NaN         0.4         NaN         NaN; NaN         NaN         NaN         0.4         NaN           0     0.43137     0.43137     0.38824         0.4         0.4         NaN         NaN         0.4         0.4         NaN; NaN         NaN         NaN         0.4         NaN           0     0.43137     0.43137     0.43137     0.43137           0         NaN         NaN         NaN         0.4         0.4; 0.4         NaN         0.4         0.4         NaN           0     0.43137     0.43137     0.43137     0.43137     0.43137           0         NaN         NaN         NaN         NaN; 0.4         0.4         0.4         NaN         NaN           0     0.43137     0.43137     0.43137     0.43137     0.43137     0.43137           0         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.43137     0.43137     0.43137     0.43137           0           0           0           0         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.43137     0.43137           0     0.43137           0         NaN         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.43137           0           0     0.43137     0.43137           0         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0           0         NaN         NaN           0     0.43137           0         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0         NaN         NaN         NaN           0     0.43137     0.43137           0         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN           0     0.43137           0         NaN         NaN         NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN  NaN  NaN];
c(:,:,2)=[NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN         NaN         NaN         NaN         NaN         0.4         0.4         NaN         NaN         NaN         NaN         0.4         0.4         NaN         NaN         NaN; NaN         NaN         NaN         NaN         0.4         0.4     0.60784           0         NaN         NaN         0.4         NaN         0.4         0.4         NaN         NaN; NaN         NaN         NaN         0.4         0.4           0     0.60784     0.60784           0         NaN         0.4         NaN         NaN         0.4         NaN         NaN; NaN         NaN         NaN         0.4         NaN           0     0.38431     0.38431     0.60784         0.4         0.4         NaN         NaN         0.4         0.4         NaN; NaN         NaN         NaN         0.4         NaN           0     0.38431     0.38431     0.38431     0.38431           0         NaN         NaN         NaN         0.4         0.4; 0.4         NaN         0.4         0.4         NaN           0     0.38431     0.38431     0.38431     0.38431     0.38431           0         NaN         NaN         NaN         NaN; 0.4         0.4         0.4         NaN         NaN           0     0.38431     0.38431     0.38431     0.38431     0.38431     0.38431           0         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.38431     0.38431     0.38431     0.38431           0           0           0           0         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.38431     0.38431           0     0.38431           0         NaN         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.38431           0           0     0.38431     0.38431           0         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0           0         NaN         NaN           0     0.38431           0         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0         NaN         NaN         NaN           0     0.38431     0.38431           0         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN           0     0.38431           0         NaN         NaN         NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN  NaN  NaN];
c(:,:,3)=[NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN  NaN  NaN  NaN  NaN    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN; NaN         NaN         NaN         NaN         NaN         0.4         0.4         NaN         NaN         NaN         NaN         0.4         0.4         NaN         NaN         NaN; NaN         NaN         NaN         NaN         0.4         0.4     0.61176           0         NaN         NaN         0.4         NaN         0.4         0.4         NaN         NaN; NaN         NaN         NaN         0.4         0.4           0     0.61176     0.61176           0         NaN         0.4         NaN         NaN         0.4         NaN         NaN; NaN         NaN         NaN         0.4         NaN           0     0.39216     0.39216     0.61176         0.4         0.4         NaN         NaN         0.4         0.4         NaN; NaN         NaN         NaN         0.4         NaN           0     0.39216     0.39216     0.39216     0.39216           0         NaN         NaN         NaN         0.4         0.4; 0.4         NaN         0.4         0.4         NaN           0     0.39216     0.39216     0.39216     0.39216     0.39216           0         NaN         NaN         NaN         NaN; 0.4         0.4         0.4         NaN         NaN           0     0.39216     0.39216     0.39216     0.39216     0.39216     0.39216           0         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.39216     0.39216     0.39216     0.39216           0           0           0           0         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.39216     0.39216           0     0.39216           0         NaN         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0     0.39216           0           0     0.39216     0.39216           0         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0           0         NaN         NaN           0     0.39216           0         NaN         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN           0         NaN         NaN         NaN           0     0.39216     0.39216           0         NaN         NaN         NaN; NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN         NaN           0     0.39216           0         NaN         NaN         NaN; NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    0    0  NaN  NaN  NaN  NaN];
img(:,:,:,2) =  c;

% ==================
% BUTTON-UP/DOWN
% ==================
%if button down ...
function lineButtonDown(this,varargin)
set(gcf,'WindowButtonMotionFcn',@figButtonMotion);%activate WBMF

%if button up..
function figButtonup(this,varargin);%du UPDATE
update()


% ==================
% UPDATE
% ==================
function   update()
han=findall(gcf,'tag','uilineshift');%get handle of ICON
x=get(han, 'userdata');
set(gcf,'WindowButtonMotionFcn',[]);%deactivate WBMF
p=findobj(gca,'type','line');%get handles of all line in axis
%for each line, update XY
for k = 1:length(p)
    s=get(p(k),'userdata');
    s.k=k;
    s.x=get(p(k),'xdata');
    s.y=get(p(k),'ydata');
    s.xo=[];
    set(p(k),'UserData',s,'ButtonDownFcn',{@lineButtonDown,p(k)});
end

% ==================
% motion [ Moving lines]
% ==================
function figButtonMotion(varargin)
curr_pt = get(gca,'CurrentPoint');
this=gco;
s=get(this,'UserData');

if isempty(s.xo)%reference values XY
    s.xo=curr_pt;
    set(this,'UserData',s);
else
    set(this,'YData',s.y - s.xo(1, 2)  +curr_pt(1, 2)  );%update XY
    set(this,'xData',s.x - s.xo(1, 1)  +curr_pt(1, 1));
    s.x=get(this,'xdata');
    s.y=get(this,'ydata');
    s.xo=curr_pt;% s.xo=[];
    set(this,'UserData',s);
end

% ==================
% context menu and callbacks
% ==================
function cmenu
cmenu = uicontextmenu;
ch=findobj(gcf,'type','axes'); %for all axes
set(ch, 'UIContextMenu', cmenu,'tag', 'context2');% Define the context menu

item1 = uimenu(cmenu, 'Label', 'original', 'Callback', {@cb1,[]});%ITEM1: set XY to original value

%  callbacks ITEM1 of ontext menu
% set XY to original value
function cb1(varargin)
p=findobj(gca,'type','line');%get all line-handles

for k = 1:length(p)
    s=get(p(k),'UserData');
    set(p(k),'xdata', s.xorig);
    set(p(k),'ydata', s.yorig);
end





Contact us at files@mathworks.com