Calculations/Data-Analyzer/+Plotter/plotG2.m

73 lines
3.0 KiB
Matlab

function plotG2(g2_all, g2_error_all, theta_values, scan_parameter_values, scan_parameter, varargin)
%% plotG2: Plots g2 angular correlations with optional parameters
%
% Usage:
% plotG2(g2_all, g2_error_all, theta_values, unique_scan_parameter_values, scan_parameter, ...
% 'Title', 'My Title', 'XLabel', 'B (G)', 'YLabel', '$g^{(2)}$', ...
% 'FigNum', 1, 'FontName', 'Arial', 'Colormap', @Colormaps.coolwarm, ...
% 'SaveFileName', 'myplot.fig', 'SaveDirectory', 'results')
% --- Parse name-value pairs ---
p = inputParser;
addParameter(p, 'Title', 'g^{(2)}(\delta\theta) vs \delta\theta', @(x) ischar(x) || isstring(x));
addParameter(p, 'XLabel', '$\delta\theta / \pi$', @(x) ischar(x) || isstring(x));
addParameter(p, 'YLabel', '$g^{(2)}(\delta\theta)$', @(x) ischar(x) || isstring(x));
addParameter(p, 'FontName', 'Arial', @ischar);
addParameter(p, 'FontSize', 14, @isnumeric);
addParameter(p, 'Colormap', @parula);
addParameter(p, 'FigNum', [], @(x) isempty(x) || (isnumeric(x) && isscalar(x)));
addParameter(p, 'SkipSaveFigures', false, @islogical);
addParameter(p, 'SaveFileName', 'figure.fig', @ischar);
addParameter(p, 'SaveDirectory', pwd, @ischar);
addParameter(p, 'YLim', [0 1], @isnumeric);
parse(p, varargin{:});
opts = p.Results;
nParams = size(g2_all, 1);
% --- Create figure ---
if isempty(opts.FigNum)
fig = figure;
else
fig = figure(opts.FigNum);
end
clf(fig);
set(fig, 'Color', 'w', 'Position', [100 100 950 750]);
hold on;
% --- Colormap ---
cmap = opts.Colormap(nParams);
% --- Plot data with errorbars ---
legend_entries = cell(nParams, 1);
for i = 1:nParams
errorbar(theta_values/pi, g2_all(i,:), g2_error_all(i,:), ...
'o', 'Color', cmap(i,:), 'MarkerSize', 4, 'MarkerFaceColor', cmap(i,:), 'CapSize', 4);
switch scan_parameter
case 'ps_rot_mag_fin_pol_angle'
legend_entries{i} = sprintf('$\\alpha = %g^\\circ$', scan_parameter_values(i));
case 'rot_mag_field'
legend_entries{i} = sprintf('B = %.2f G', scan_parameter_values(i));
otherwise
legend_entries{i} = sprintf('%g', scan_parameter_values(i));
end
end
% --- Formatting ---
xlabel(opts.XLabel, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize);
ylabel(opts.YLabel, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize);
title(opts.Title, 'Interpreter', 'latex', 'FontName', opts.FontName, 'FontSize', opts.FontSize + 2);
legend(legend_entries, 'Interpreter', 'latex', 'Location', 'bestoutside');
set(gca, 'FontName', opts.FontName, 'FontSize', opts.FontSize);
ylim(opts.YLim);
grid on;
% --- Save figure ---
Plotter.saveFigure(fig, ...
'SaveFileName', opts.SaveFileName, ...
'SaveDirectory', opts.SaveDirectory, ...
'SkipSaveFigures', opts.SkipSaveFigures);
end