changeset 10218:ce94aaa71a4f

daspect.m, pbaspect.m: New functions.
author Ben Abbott <bpabbott@mac.com>
date Thu, 28 Jan 2010 20:59:31 -0500
parents db7fdd6a1512
children 979fb2606c4f
files scripts/ChangeLog scripts/plot/daspect.m scripts/plot/module.mk scripts/plot/pbaspect.m
diffstat 4 files changed, 204 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Thu Jan 28 17:27:44 2010 -0500
+++ b/scripts/ChangeLog	Thu Jan 28 20:59:31 2010 -0500
@@ -1,3 +1,7 @@
+2010-01-28  Ben Abbott <bpabbot@mac.com>
+
+	* plot/daspect.m, plot/pbaspect.m: New functions.
+
 2010-01-28  John W. Eaton  <jwe@octave.org>
 
 	* general/Makefile.am (general_FCN_FILES): Add chop.m to the list.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/daspect.m	Thu Jan 28 20:59:31 2010 -0500
@@ -0,0 +1,100 @@
+## Copyright (C) 2010 Ben Abbott
+## 
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+## 
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+## 
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} daspect (@var{data_aspect_ratio})
+## Set the data aspect ratio of the current axes. The aspect ratio is
+## a normalized 3 element vector representing the span of the x, y, and 
+## z-axes limits.
+## @deftypefnx {Function File} {@var{data_aspect_ratio} =} daspect ( )
+## Return the data aspect ratio of the current axes.
+## @deftypefnx {Function File} {} daspect (@var{mode})
+## Set the data aspect ratio mode of the current axes.
+## @deftypefnx {Function File} {@var{data_aspect_ratio_mode} =} daspect ("mode")
+## Return the data aspect ratio mode of the current axes.
+## @deftypefnx {Function File} {} daspect (@var{hax}, @dots{})
+## Uses the axes, with handle @var{hax}, instead of the current axes.
+##
+## @seealso{axis, pbaspect, xlim, ylim, zlim}
+## @end deftypefn
+
+## Author: Ben Abbott <bpabbott@mac.com>
+## Created: 2010-01-26
+
+function varargout = daspect (varargin)
+
+  hax = gca ();
+
+  if (nargin > 0)
+    if (isscalar (varargin{1}) && ishandle (varargin{1}))
+      hax = varargin{1};
+      varargin = varargin(2:end);
+    endif
+  endif
+  if (numel (varargin) > 0)
+    if (numel (varargin) == 1)
+      if (ischar (varargin{1})
+          && any (strcmpi (varargin{1}, {"mode", "manual", "auto"})))
+        switch varargin{1}
+        case {"mode"}
+          if (nargout < 2)
+            varargout{1} = get (hax, "dataaspectratiomode");
+            return
+          else
+            error ("daspect: only one output is allowed.")
+          end
+        case {"manual"}
+          set (hax, "dataaspectratiomode", "manual");
+        case {"auto"}
+          set (hax, "dataaspectratiomode", "auto");
+        endswitch
+      elseif (isreal (varargin{1})
+              && any (numel (varargin{1}) == [2 3]))
+        set (hax, "dataaspectratio", varargin{1})
+      else
+        error ("daspect: invalid input.")
+      endif
+    elseif (numel (varargin) > 1)
+      error ("daspect: too many inputs.")
+    endif
+  elseif (nargout == 0)
+    print_usage ();
+  end
+
+  if (nargout == 1)
+    varargout{1} = get (hax, "dataaspectratio");
+  elseif (nargout > 1)
+    error ("daspect: only one output is allowed.")
+  end
+
+endfunction
+
+%!demo
+%! x = 0:0.01:4;
+%! clf
+%! plot (x, cos (x), x, sin (x))
+%! axis square
+%! daspect ([1 1 1])
+%! title ("axis limits should be [0, 4, -2, 2]")
+
+%!demo
+%! x = 0:0.01:4;
+%! clf
+%! plot (x, cos (x), x, sin (x))
+%! axis ([0 4 -1 1])
+%! daspect ([2 1 1])
+%! title ("axis box should be square")
+
--- a/scripts/plot/module.mk	Thu Jan 28 17:27:44 2010 -0500
+++ b/scripts/plot/module.mk	Thu Jan 28 20:59:31 2010 -0500
@@ -63,6 +63,7 @@
   plot/contourc.m \
   plot/contourf.m \
   plot/cylinder.m \
+  plot/daspect.m \
   plot/diffuse.m \
   plot/ellipsoid.m \
   plot/errorbar.m \
@@ -113,6 +114,7 @@
   plot/orient.m \
   plot/pareto.m \
   plot/patch.m \
+  plot/pbaspect.m \
   plot/pcolor.m \
   plot/peaks.m \
   plot/pie.m \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/pbaspect.m	Thu Jan 28 20:59:31 2010 -0500
@@ -0,0 +1,98 @@
+## Copyright (C) 2010 Ben Abbott
+## 
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+## 
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+## 
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} pbaspect (@var{plot_box_aspect_ratio})
+## Set the plot box aspect ratio of the current axes. The aspect ratio
+## is a normalized 3 element vector representing the rendered lengths of
+## the x, y, and z-axes.
+## @deftypefnx {Function File} {@var{plot_box_aspect_ratio} =} pbaspect ( )
+## Return the plot box aspect ratio of the current axes.
+## @deftypefnx {Function File} {} pbaspect (@var{mode})
+## Set the plot box aspect ratio mode of the current axes.
+## @deftypefnx {Function File} {@var{plot_box_aspect_ratio_mode} =} pbaspect ("mode")
+## Return the plot box aspect ratio mode of the current axes.
+## @deftypefnx {Function File} {} pbaspect (@var{hax}, @dots{})
+## Uses the axes, with handle @var{hax}, instead of the current axes.
+##
+## @seealso{axis, daspect, xlim, ylim, zlim}
+## @end deftypefn
+
+## Author: Ben Abbott <bpabbott@mac.com>
+## Created: 2010-01-26
+
+function varargout = pbaspect (varargin)
+
+  hax = gca ();
+
+  if (nargin > 0)
+    if (isscalar (varargin{1}) && ishandle (varargin{1}))
+      hax = varargin{1};
+      varargin = varargin(2:end);
+    endif
+  endif
+  if (numel (varargin) > 0)
+    if (numel (varargin) == 1)
+      if (ischar (varargin{1})
+          && any (strcmpi (varargin{1}, {"mode", "manual", "auto"})))
+        switch varargin{1}
+        case {"mode"}
+          if (nargout < 2)
+            varargout{1} = get (hax, "plotboxaspectratiomode");
+            return
+          else
+            error ("pbaspect: only one output is allowed.")
+          end
+        case {"manual"}
+          set (hax, "plotboxaspectratiomode", "manual");
+        case {"auto"}
+          set (hax, "plotboxaspectratiomode", "auto");
+        endswitch
+      elseif (isreal (varargin{1})
+              && any (numel (varargin{1}) == [2 3]))
+        set (hax, "plotboxaspectratio", varargin{1})
+      else
+        error ("pbaspect: invalid input.")
+      endif
+    elseif (numel (varargin) > 1)
+      error ("pbaspect: too many inputs.")
+    endif
+  elseif (nargout == 0)
+    print_usage ();
+  end
+
+  if (nargout == 1)
+    varargout{1} = get (hax, "plotboxaspectratio");
+  elseif (nargout > 1)
+    error ("pbaspect: only one output is allowed.")
+  end
+
+endfunction
+
+%!demo
+%! x = 0:0.01:4;
+%! clf
+%! plot (x, cos (x), x, sin (x))
+%! pbaspect ([1 1 1])
+%! title ('plot box should be square')
+
+%!demo
+%! x = 0:0.01:4;
+%! clf
+%! plot (x, cos (x), x, sin (x))
+%! pbaspect ([2 1 1])
+%! title ('plot box aspect ratio should be 2x1')
+