Mercurial > hg > octave-lojdl
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 +++ b/scripts/ChangeLog @@ -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.
new file mode 100644 --- /dev/null +++ b/scripts/plot/daspect.m @@ -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 +++ b/scripts/plot/module.mk @@ -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 \
new file mode 100644 --- /dev/null +++ b/scripts/plot/pbaspect.m @@ -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') +