Code covered by the BSD License  

Highlights from
Introduction to Object-Oriented Programming in MATLAB(R) Webinar

image thumbnail

Introduction to Object-Oriented Programming in MATLAB(R) Webinar

by

 

09 Apr 2009 (Updated )

Files from the "Introduction to Object-Oriented Programming in MATLAB(R)" Webinar.

hhh=vline(x,in1,in2,in3)
function hhh=vline(x,in1,in2,in3)
% function h=vline(x, linetype, label)
% SMH: vline(hAX, ...) places on specified axes
% Draws a vertical line on the current axes at the location specified by 'x'.  Optional arguments are
% 'linetype' (default is 'r:') and 'label', which applies a text label to the graph near the line.  The
% label appears in the same color as the line.
%
% The line is held on the current axes, and after plotting the line, the function returns the axes to
% its prior hold state.
%
% The HandleVisibility property of the line object is set to "off", so not only does it not appear on
% legends, but it is not findable by using findobj.  Specifying an output argument causes the function to
% return a handle to the line, so it can be manipulated or deleted.  Also, the HandleVisibility can be
% overridden by setting the root's ShowHiddenHandles property to on.
%
% h = vline(42,'g','The Answer')
%
% returns a handle to a green vertical line on the current axes at x=42, and creates a text object on
% the current axes, close to the line, which reads "The Answer".
%
% vline also supports vector inputs to draw multiple lines at once.  For example,
%
% vline([4 8 12],{'g','r','b'},{'l1','lab2','LABELC'})
%
% draws three lines with the appropriate labels and colors.
%
% By Brandon Kuczenski for Kensington Labs.
% brandon_kuczenski@kensingtonlabs.com
% 8 November 2001

% smh: very sloppy code up front to handle axes passed in
% smh: check first input argument
if ishandle(x)
  if strcmp(get(x,'Type'),'axes')
    hAx = x;
    x = in1;
    if nargin>=3
      in1 = in2;
    end;
    if nargin==4
      in2 = in3;
    end;
  else
    hAx = gca;
  end;
else
  hAx = gca;
end


if length(x)>1  % vector input
  for I=1:length(x)
    switch nargin
      case 1
        linetype='r:';
        label='';
      case 2
        if ~iscell(in1)
          in1={in1};
        end
        if I>length(in1)
          linetype=in1{end};
        else
          linetype=in1{I};
        end
        label='';
      case 3
        if ~iscell(in1)
          in1={in1};
        end
        if ~iscell(in2)
          in2={in2};
        end
        if I>length(in1)
          linetype=in1{end};
        else
          linetype=in1{I};
        end
        if I>length(in2)
          label=in2{end};
        else
          label=in2{I};
        end
    end
    h(I)=vline(x(I),linetype,label);
  end
else
  switch nargin
    case 1
      linetype='r:';
      label='';
    case 2
      linetype=in1;
      label='';
    case 3
      linetype=in1;
      label=in2;
  end




  g=ishold(hAx);
  hold on

  y=get(hAx,'ylim');
  h=plot([x x],y,linetype);
  if length(label)
    xx=get(hAx,'xlim');
    xrange=xx(2)-xx(1);
    xunit=(x-xx(1))/xrange;
    if xunit<0.8
      text(x+0.01*xrange,y(1)+0.1*(y(2)-y(1)),label,'color',get(h,'color'))
    else
      text(x-.05*xrange,y(1)+0.1*(y(2)-y(1)),label,'color',get(h,'color'))
    end
  end

  if g==0
    hold off
  end
  set(h,'tag','vline','handlevisibility','off')
end % else

if nargout
  hhh=h;
end

Contact us