Mercurial > hg > octave-lyh
diff scripts/plot/stairs.m @ 4:b4df021f796c
[project @ 1993-08-08 01:26:08 by jwe]
Initial revision
author | jwe |
---|---|
date | Sun, 08 Aug 1993 01:26:08 +0000 |
parents | |
children | 5b46fbec1488 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/plot/stairs.m @@ -0,0 +1,78 @@ +function [xs, ys] = stairs (x, y) + +# usage: [xs, ys] = bar (x, y) +# +# Given two vectors of x-y data, bar produces a `stairstep' plot. +# +# If only one argument is given, it is taken as a vector of y-values +# and the x coordiates are taken to be the indices of the elements. +# +# If two output arguments are specified, the data are generated but +# not plotted. For example, +# +# bar (x, y); +# +# and +# +# [xs, ys] = stairs (x, y); +# plot (xs, ys); +# +# are equivalent. +# +# See also: plot, semilogx, semilogy, loglog, polar, mesh, contour, +# bar, gplot, gsplot, replot, xlabel, ylabel, title + + + if (nargin == 1) + if (is_vector (x)) + len = 2 * length (x); + xs = ys = zeros (len, 1); + k = 0; + for i = 1:2:len + xs(i) = k++; + ys(i) = x(k); + ys(i+1) = x(k); + xs(i+1) = k; + endfor + else + error ("stairs: argument must be a vector"); + endif + elseif (nargin == 2) + if (is_vector (x) && is_vector (y)) + xlen = length (x); + ylen = length (y); + if (xlen == ylen) + len = 2 * xlen; + xs = ys = zeros (len, 1); + k = 1; + len_m2 = len - 2; + for i = 1:2:len_m2 + xs(i) = x(k); + ys(i) = y(k); + ys(i+1) = y(k); + k++; + xs(i+1) = x(k); + if (x(k) < x(k-1)) + error ("stairs: x vector values must be in ascending order"); + endif + endfor + xs(len-1) = x(xlen); + delta = x(xlen) - x(xlen-1); + xs(len) = x(xlen) + delta; + ys(len-1) = y(ylen); + ys(len) = y(ylen); + else + error ("stairs: arguments must be the same length"); + endif + else + error ("stairs: arguments must be vectors"); + endif + else + error ("usage: [xs, ys] = stairs (x, y)"); + endif + + if (nargout == 1) + plot (xs, ys); + endif + +endfunction