function ranges = axis(a_plot)

% axis - Returns the estimated axis ranges of this plot according to its data.
%
% Usage:
% ranges = axis(a_plot)
%
% Description:
%
%   Parameters:
%	a_plot: A plot_abstract object, or a subclass object.
%		
%   Returns:
%	ranges: The ranges as a vector in the same way 'axis' would return.
%
% See also: plot_abstract, plot_abstract/plot
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2004/10/13

% Copyright (c) 2007 Cengiz Gunay <cengique@users.sf.net>.
% This work is licensed under the Academic Free License ("AFL")
% v. 3.0. To view a copy of this license, please look at the COPYING
% file distributed with this software or visit
% http://opensource.org/licenses/afl-3.0.php.

switch a_plot.command
  case 'boxplotp'
    if length(a_plot.data) > 3
      up_data = a_plot.data{4};
    else
      up_data = a_plot.data{3};
    end
    ranges = [ 0.5 size(a_plot.data{1}, 2)+0.5 ...
	      min(min(a_plot.data{1})) max(max(a_plot.data{1}))];
  case 'errorbar'
    if length(a_plot.data) > 3
      up_data = a_plot.data{4};
    else
      up_data = a_plot.data{3};
    end
    ranges = [ min(a_plot.data{1}) max(a_plot.data{1}) ...
	      min(a_plot.data{2} - a_plot.data{3}) max(a_plot.data{2} + up_data)];
  case 'bar'
    ranges = [ min(a_plot.data{1}) max(a_plot.data{1}) ...
               min(min(a_plot.data{2})) max(max(a_plot.data{2}))];
  otherwise
    if (length(a_plot.data) > 1)
      ranges = [ min(a_plot.data{1}) max(a_plot.data{1}) ...
                 min(a_plot.data{2}) max(a_plot.data{2})];
    else
      ranges = [0 0 0 0];
    end
end