function a_plot_stack = plotVarBoxMatrix(a_db, p_t3ds, props)
% plotVarBoxMatrix - Create a stack of parameter-test variation plots
% organized in a matrix.
%
% Usage:
% a_plot_stack = plotVarBoxMatrix(a_db, p_t3ds)
%
% Description:
% Skips the 'ItemIndex' test.
%
% Parameters:
% a_db: A tests_db object.
% p_t3ds: Cell array of invariant parameter databases.
%
% Returns:
% a_plot_stack: A plot_stack with the plots organized in matrix form
%
% See also: params_tests_profile, plotVar
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2004/10/17
% 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.
if ~ exist('props', 'var')
props = struct([]);
end
num_params = a_db.num_params;
num_tests = dbsize(a_db, 2) - num_params - 1; % Except the item indices
for param_num=1:num_params
pss_t3ds{param_num} = swapRowsPages(sortrows(p_t3ds{param_num}, 1));
end
% TODO: Row stacks with
plot_rows = cell(1, num_tests);
for test_num=1:num_tests
plots = cell(1, num_params);
ranges = [];
for param_num=1:num_params
a_plot = plotVarBox(pss_t3ds{param_num}, 1, test_num + 1, ...
1, 'r.', 1, 1.5, ...
struct('rotateYLabel', 60));
% Calculate the maximal axis range
if isempty(ranges)
ranges = axis(a_plot);
else
ranges = growRange([ranges; axis(a_plot)]);
end
plots{param_num} = a_plot;
end
if test_num == 1
rprops = struct('titlesPos', 'none', ...
'yLabelsPos', 'left', ...
'yTicksPos', 'left');
else
rprops = struct('titlesPos', 'none', ...
'yLabelsPos', 'left', ...
'yTicksPos', 'left', ...
'xLabelsPos', 'none', ...
'xTicksPos', 'none');
end
% fixed y-axis bounds, but flexible x-axis (reversed for boxplot weirdness)
plot_rows{test_num} = plot_stack(plots, [NaN NaN ranges(1:2)], 'x', '', rprops);
end
% User passed properties take precedence
vprops = mergeStructs(props, struct('titlesPos', 'none', ...
'xLabelsPos', 'bottom', ...
'xTicksPos', 'bottom'));
a_plot_stack = plot_stack(plot_rows, [], 'y', ...
['Measure Variations with Parameter Values in ' ...
get(a_db, 'id')], ...
vprops);