Mercurial > hg > octave-lyh
diff scripts/plot/ribbon.m @ 17077:f8b485d09ac6
ribbon.m, slice.m: Overhaul to use __plt_get_axis_arg__.
* scripts/plot/ribbon.m, scripts/plot/slice.m:
Overhaul to use __plt_get_axis_arg__. Redo docstring.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 24 Jul 2013 23:12:46 -0700 |
parents | c728c87f43ba |
children | a639221f9863 |
line wrap: on
line diff
--- a/scripts/plot/ribbon.m +++ b/scripts/plot/ribbon.m @@ -17,13 +17,19 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {} ribbon (@var{x}, @var{y}, @var{width}) -## @deftypefnx {Function File} {} ribbon (@var{y}) +## @deftypefn {Function File} {} ribbon (@var{y}) +## @deftypefnx {Function File} {} ribbon (@var{x}, @var{y}) +## @deftypefnx {Function File} {} ribbon (@var{x}, @var{y}, @var{width}) +## @deftypefnx {Function File} {} ribbon (@var{hax}, @dots{}) ## @deftypefnx {Function File} {@var{h} =} ribbon (@dots{}) -## Plot a ribbon plot for the columns of @var{y} vs. @var{x}. The -## optional parameter @var{width} specifies the width of a single ribbon +## Plot a ribbon plot for the columns of @var{y} vs. @var{x}. +## +## The optional parameter @var{width} specifies the width of a single ribbon ## (default is 0.75). If @var{x} is omitted, a vector containing the -## row numbers is assumed (1:rows (Y)). +## row numbers is assumed (@code{1:rows (Y)}). +## +## If the first argument @var{hax} is an axis handle, then plot into this axis, +## rather than the current axis handle returned by @code{gca}. ## ## The optional return value @var{h} is a vector of graphics handles to ## the surface objects representing each ribbon. @@ -31,19 +37,30 @@ ## Author: Kai Habel <kai.habel at gmx.de> -function h = ribbon (x, y, width = 0.75) +function h = ribbon (varargin) + + [hax, varargin, nargin] = __plt_get_axis_arg__ ("ribbon", varargin{:}); if (nargin < 1 || nargin > 3) print_usage (); endif if (nargin == 1) - y = x; + y = varargin{1}; if (isvector (y)) y = y(:); endif [nr, nc] = size (y); x = repmat ((1:nr)', 1, nc); + width = 0.75; + elseif (nargin == 2) + x = varargin{1}; + y = varargin{2}; + width = 0.75; + else + x = varargin{1}; + y = varargin{2}; + width = varargin{3}; endif if (isvector (x) && isvector (y)) @@ -58,25 +75,32 @@ endif endif - newplot (); + oldfig = ifelse (isempty (hax), [], get (0, "currentfigure")); + unwind_protect + hax = newplot (hax); - [nr, nc] = size (y); - htmp = zeros (nc, 1); + [nr, nc] = size (y); + htmp = zeros (nc, 1); - for c = nc:-1:1 - zz = [y(:,c), y(:,c)]; - yy = x(:,c); - xx = [c - width / 2, c + width / 2]; - [xx, yy] = meshgrid (xx, yy); - cc = repmat (c, size (zz)); - htmp(c) = surface (xx, yy, zz, cc); - endfor + for c = nc:-1:1 + zz = [y(:,c), y(:,c)]; + yy = x(:,c); + xx = [c - width / 2, c + width / 2]; + [xx, yy] = meshgrid (xx, yy); + cc = repmat (c, size (zz)); + htmp(c) = surface (xx, yy, zz, cc); + endfor - if (! ishold ()) - ax = get (htmp(1), "parent"); - set (ax, "view", [-37.5, 30], "box", "off", - "xgrid", "on", "ygrid", "on", "zgrid", "on"); - endif + if (! ishold ()) + set (hax, "view", [-37.5, 30], "box", "off", + "xgrid", "on", "ygrid", "on", "zgrid", "on"); + endif + + unwind_protect_cleanup + if (! isempty (oldfig)) + set (0, "currentfigure", oldfig); + endif + end_unwind_protect if (nargout > 0) h = htmp;