diff scripts/plot/bar.m @ 6540:9dcfc78da664

[project @ 2007-04-18 21:16:08 by dbateman]
author dbateman
date Wed, 18 Apr 2007 21:16:08 +0000
parents 2110cc251779
children 76e3d985ae56
line wrap: on
line diff
--- a/scripts/plot/bar.m
+++ b/scripts/plot/bar.m
@@ -18,12 +18,18 @@
 ## 02110-1301, USA.
 
 ## -*- texinfo -*-
-## @deftypefn {Function File} {} bar (@var{x}, @var{y})
+## @deftypefn {Function File} {@var{h} =} bar (@var{x}, @var{y}, @var{style})
+## @deftypefnx {Function File} {[@var{xb}, @var{yb}] =} bar (@dots{})
 ## Given two vectors of x-y data, @code{bar} produces a bar graph.
 ##
 ## If only one argument is given, it is taken as a vector of y-values
 ## and the x coordinates are taken to be the indices of the elements.
 ##
+## If @var{y} is a matrix, then each column of @var{y} is taken to be a
+## separate bar graph plotted on the same graph. By default the columns
+## are plotted side-by-side. This behavior can be changed by the @var{style}
+## argument, which can take the values 'group' (the default), or 'stack'.
+##
 ## If two output arguments are specified, the data are generated but
 ## not plotted.  For example,
 ##
@@ -41,84 +47,13 @@
 ##
 ## @noindent
 ## are equivalent.
-## @seealso{plot, semilogx, semilogy, loglog, polar, mesh, contour,
+## @seealso{hbar, plot, semilogx, semilogy, loglog, polar, mesh, contour,
 ## stairs, xlabel, ylabel, title}
 ## @end deftypefn
 
 ## Author: jwe
 
-function [xb, yb] = bar (x, y)
-
-  if (nargin == 1)
-    if (isvector (x))
-      len = 3 * length (x) + 1;
-      tmp_xb = tmp_yb = zeros (len, 1);
-      tmp_xb(1) = 0.5;
-      tmp_yb(1) = 0;
-      k = 1;
-      for i = 2:3:len
-        tmp_xb(i) = k-0.5;
-        tmp_xb(i+1) = k+0.5;
-        tmp_xb(i+2) = k+0.5;
-        tmp_yb(i) = x(k);
-        tmp_yb(i+1) = x(k);
-        tmp_yb(i+2) = 0.0;
-        k++;
-      endfor
-    else
-      error ("bar: argument must be a vector");
-    endif
-  elseif (nargin == 2)
-    if (isvector (x) && isvector (y))
-      xlen = length (x);
-      ylen = length (y);
-      if (xlen == ylen)
-        len = 3 * xlen + 1;
-        tmp_xb = tmp_yb = zeros (len, 1);
-        cutoff = zeros (1, xlen);
-        for i = 1:xlen-1
-          cutoff(i) = (x(i) + x(i+1)) / 2.0;
-        endfor
-        delta_p = cutoff(1) - x(1);
-        delta_m = delta_p;
-        tmp_xb(1) = x(1) - delta_m;
-        tmp_yb(1) = 0.0;
-        k = 1;
-        for i = 2:3:len
-          tmp_xb(i) = tmp_xb(i-1);
-          tmp_xb(i+1) = x(k) + delta_p;
-          tmp_xb(i+2) = tmp_xb(i+1);
-          tmp_yb(i) = y(k);
-          tmp_yb(i+1) = y(k);
-          tmp_yb(i+2) = 0.0;
-          if (k < xlen)
-            if (x(k+1) < x(k))
-              error ("bar: x vector values must be in ascending order");
-            endif
-            delta_m = x(k+1) - cutoff(k);
-            k++;
-            if (k < xlen)
-              delta_p = cutoff(k) - x(k);
-            else
-              delta_p = delta_m;
-            endif
-          endif
-        endfor
-      else
-        error ("bar: arguments must be the same length");
-      endif
-    else
-      error ("bar: arguments must be vectors");
-    endif
-  else
-    print_usage ();
-  endif
-
-  if (nargout == 0)
-    plot (tmp_xb, tmp_yb);
-  else
-    xb = tmp_xb;
-    yb = tmp_yb;
-  endif
-
+function varargout = bar (varargin)
+  varargout = cell (nargout, 1);
+  [varargout{:}] = __bar__ (true, "bar", varargin{:});
 endfunction