84 lines
3.1 KiB
Matlab
84 lines
3.1 KiB
Matlab
function compareMultipleDatasets(scanValsCell, meanValsCell, stderrValsCell, varargin)
|
|
% compareMultipleDatasets compares multiple datasets with error bars.
|
|
%
|
|
% Inputs:
|
|
% scanValsCell - cell array of x-values for each dataset
|
|
% meanValsCell - cell array of mean y-values for each dataset
|
|
% stderrValsCell - cell array of std/error values for each dataset
|
|
%
|
|
% Name-Value Pair Arguments:
|
|
% 'FigNum', 'FontName', 'MarkerSize', 'LineWidth', 'CapSize',
|
|
% 'YLim', 'Labels', 'Title', 'XLabel', 'YLabel',
|
|
% 'SkipSaveFigures', 'SaveFileName', 'SaveDirectory'
|
|
|
|
% --- Parse inputs ---
|
|
p = inputParser;
|
|
addParameter(p, 'FigNum', 1, @isnumeric);
|
|
addParameter(p, 'FontName', 'Arial', @ischar);
|
|
addParameter(p, 'MarkerSize', 6, @isnumeric);
|
|
addParameter(p, 'LineWidth', 1.5, @isnumeric);
|
|
addParameter(p, 'CapSize', 5, @isnumeric);
|
|
addParameter(p, 'YLim', [], @isnumeric);
|
|
addParameter(p, 'Labels', {}, @iscell);
|
|
addParameter(p, 'Title', '', @ischar);
|
|
addParameter(p, 'XLabel', '', @ischar);
|
|
addParameter(p, 'YLabel', '', @ischar);
|
|
addParameter(p, 'SkipSaveFigures', true, @islogical);
|
|
addParameter(p, 'SaveDirectory', pwd, @ischar);
|
|
addParameter(p, 'SaveFileName', 'figure.fig', @ischar);
|
|
parse(p, varargin{:});
|
|
opts = p.Results;
|
|
|
|
% --- Default labels ---
|
|
nDatasets = numel(scanValsCell);
|
|
if isempty(opts.Labels)
|
|
opts.Labels = arrayfun(@(i) sprintf('Dataset %d',i), 1:nDatasets, 'UniformOutput', false);
|
|
end
|
|
|
|
% --- Marker/line style cycle ---
|
|
markerList = {'o', 's', 'd', '^', 'v', '>', '<', 'p', 'h', '*', '+'};
|
|
lineList = {'-', '--', ':', '-.'};
|
|
|
|
% --- Plot ---
|
|
fig = figure(opts.FigNum); clf;
|
|
set(fig, 'Color', 'w', 'Position', [100 100 950 750]);
|
|
hold on;
|
|
|
|
for i = 1:nDatasets
|
|
marker = markerList{mod(i-1, numel(markerList)) + 1};
|
|
lineStyle = lineList{mod(i-1, numel(lineList)) + 1};
|
|
styleStr = [marker lineStyle];
|
|
|
|
if isempty(stderrValsCell{i})
|
|
plot(scanValsCell{i}, meanValsCell{i}, styleStr, ...
|
|
'MarkerSize', opts.MarkerSize, 'LineWidth', opts.LineWidth, ...
|
|
'DisplayName', opts.Labels{i});
|
|
else
|
|
errorbar(scanValsCell{i}, meanValsCell{i}, stderrValsCell{i}, styleStr, ...
|
|
'MarkerSize', opts.MarkerSize, 'LineWidth', opts.LineWidth, 'CapSize', opts.CapSize, ...
|
|
'DisplayName', opts.Labels{i});
|
|
end
|
|
end
|
|
|
|
hold off;
|
|
ax = gca;
|
|
axisFontSize = 14;
|
|
titleFontSize = 16;
|
|
set(ax, 'FontName', opts.FontName, 'FontSize', axisFontSize);
|
|
|
|
if ~isempty(opts.YLim)
|
|
ylim(opts.YLim);
|
|
end
|
|
|
|
xlabel(opts.XLabel, 'Interpreter', 'latex', 'FontSize', axisFontSize);
|
|
ylabel(opts.YLabel, 'Interpreter', 'latex', 'FontSize', axisFontSize);
|
|
title(opts.Title, 'Interpreter', 'latex', 'FontSize', titleFontSize);
|
|
legend('Location', 'best');
|
|
grid on;
|
|
|
|
% --- Save figure ---
|
|
Plotter.saveFigure(fig, ...
|
|
'SaveFileName', opts.SaveFileName, ...
|
|
'SaveDirectory', opts.SaveDirectory, ...
|
|
'SkipSaveFigures', opts.SkipSaveFigures);
|
|
end |