home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / scripts / plot / stairs.m < prev    next >
Text File  |  1996-09-28  |  3KB  |  100 lines

  1. # Copyright (C) 1993, 1994, 1995 John W. Eaton
  2. # This file is part of Octave.
  3. # Octave is free software; you can redistribute it and/or modify it
  4. # under the terms of the GNU General Public License as published by the
  5. # Free Software Foundation; either version 2, or (at your option) any
  6. # later version.
  7. # Octave is distributed in the hope that it will be useful, but WITHOUT
  8. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  9. # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  10. # for more details.
  11. # You should have received a copy of the GNU General Public License
  12. # along with Octave; see the file COPYING.  If not, write to the Free
  13. # Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  14.  
  15. function [xs, ys] = stairs (x, y)
  16.  
  17. # usage: [xs, ys] = stairs (x, y)
  18. #
  19. # Given two vectors of x-y data, stairs produces a `stairstep' plot.
  20. #
  21. # If only one argument is given, it is taken as a vector of y-values
  22. # and the x coordiates are taken to be the indices of the elements.
  23. #
  24. # If two output arguments are specified, the data are generated but
  25. # not plotted.  For example,
  26. #
  27. #   stairs (x, y);
  28. #
  29. # and
  30. #
  31. #   [xs, ys] = stairs (x, y);
  32. #   plot (xs, ys);
  33. #
  34. # are equivalent.
  35. #
  36. # See also: plot, semilogx, semilogy, loglog, polar, mesh, contour,
  37. #           bar, gplot, gsplot, replot, xlabel, ylabel, title 
  38.  
  39.  
  40.   if (nargin == 1)
  41.     if (is_vector (x))
  42.       len = 2 * length (x);
  43.       tmp_xs = tmp_ys = zeros (len, 1);
  44.       k = 0;
  45.       for i = 1:2:len
  46.         tmp_xs(i) = k++;
  47.         tmp_ys(i) = x(k);
  48.         tmp_ys(i+1) = x(k);
  49.         tmp_xs(i+1) = k;
  50.       endfor
  51.     else
  52.       error ("stairs: argument must be a vector");
  53.     endif
  54.   elseif (nargin == 2)
  55.     if (is_vector (x) && is_vector (y))
  56.       xlen = length (x);
  57.       ylen = length (y);
  58.       if (xlen == ylen)
  59.         len = 2 * xlen;
  60.         tmp_xs = tmp_ys = zeros (len, 1);
  61.     k = 1;
  62.         len_m2 = len - 2;
  63.     for i = 1:2:len_m2
  64.       tmp_xs(i) = x(k);
  65.       tmp_ys(i) = y(k);
  66.       tmp_ys(i+1) = y(k);
  67.           k++;
  68.       tmp_xs(i+1) = x(k);
  69.           if (x(k) < x(k-1))
  70.             error ("stairs: x vector values must be in ascending order");
  71.           endif
  72.     endfor
  73.         tmp_xs(len-1) = x(xlen);
  74.         delta = x(xlen) - x(xlen-1);
  75.         tmp_xs(len) = x(xlen) + delta;
  76.         tmp_ys(len-1) = y(ylen);
  77.         tmp_ys(len) = y(ylen);
  78.       else
  79.         error ("stairs: arguments must be the same length");
  80.       endif
  81.     else
  82.       error ("stairs: arguments must be vectors");
  83.     endif
  84.   else
  85.     usage ("[xs, ys] = stairs (x, y)");
  86.   endif
  87.  
  88.   if (nargout == 0)
  89.     plot (tmp_xs, tmp_ys);
  90.   else
  91.     xs = tmp_xs;
  92.     ys = tmp_ys;
  93.   endif
  94.  
  95. endfunction
  96.