function a_plot = plotColorSumVar(p_stats, title_str, props)
% plotColorVar - Create a color-plot of parameter-test variations in a matrix.
%
% Usage:
% a_plot = plotColorVar(p_stats, props)
%
% Description:
% Skips the 'ItemIndex' test.
%
% Parameters:
% p_stats: Array of invariant parameter databases obtained from
% calling tests_3D_db/paramsTestsHistsStats.
% title_str: (Optional) String to append to plot title.
% props: A structure with any optional properties, passed to plot_stack.
% plotMethod: 'plotVar' uses stats_db/plotVar (default)
% 'plot_bars' uses stats_db/plot_bars
%
% Returns:
% a_plot: A plot_abstract with the color plot
%
% See also: paramsTestsHistsStats, 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 = length(p_stats);
num_tests = dbsize(p_stats(1), 2) - 2; % Subtract param and RowIndex columns
image_data = zeros(num_tests, num_params);
for param_num=1:num_params
image_data(1:num_tests, param_num) = ...
transpose(get(sum(swapRowsPages(onlyRowsTests(p_stats(param_num), ...
1, 2:(1+num_tests), ':'))), 'data'));
end
% normalize each test row
image_data = image_data ./ (max(abs(image_data), [], 2) * ones(1, size(image_data, 2)));
num_colors = 49;
num_plot_rows = size(image_data, 1);
plot_props = struct('border', 0.05);
plot_props.YTick = 1:num_tests;
row_labels = properTeXLabel(getColNames(p_stats(1), 2:(1+num_tests)));
plot_props.YTickLabel = row_labels;
plot_props.XTick = 1:num_params;
for param_num = 1:num_params
a_cell = getColNames(p_stats(param_num), 1);
col_labels{param_num} = a_cell{1};
end
plot_props.XTickLabel = properTeXLabel(col_labels);
if ~ exist('title_str', 'var') || isempty(title_str)
title_str = ['Summed matrix of ' lower(strrep(get(p_stats(1), 'id'), '_', ' ')) ];
end
a_plot = plot_abstract({image_data * num_colors + num_colors, @colormapBlueCrossRed, ...
num_colors, props}, {}, ...
title_str, {}, @plot_image, mergeStructs(props, plot_props));
end
% Small function for creating matrix plot
function h = plot_image(image_data, colormap_func, num_colors, props)
h = image(image_data);
% Show up to some number of STDs
colormap(feval(colormap_func, num_colors));
if isfield(props, 'colorbar')
hc = colorbar;
set(hc, 'YTick', [1, (num_colors + 1), (2 * num_colors + 1)]);
set(hc, 'YTickLabel', [-1, 0, +1]);
end
% scale font to fit measure names on y-axis
num_rows = max(100, size(image_data, 1));
%set(gca, 'FontUnit', 'normalized', 'FontSize', 1/num_rows);
end