From 1040640eeeabb236db584bbc990105b014f9cadf Mon Sep 17 00:00:00 2001 From: giuliaghirardini <giulia.ghirardini@skywarder.eu> Date: Sun, 16 Feb 2025 00:01:07 +0100 Subject: [PATCH] [export-standardized-figure][utilities] Added methods to handle 3D plots, geoplot, subplots, vertical plots and multiple plots with tabgroup --- functions/utilities/exportFigureGUI.m | 98 ++++++++++++++++++--------- 1 file changed, 67 insertions(+), 31 deletions(-) diff --git a/functions/utilities/exportFigureGUI.m b/functions/utilities/exportFigureGUI.m index 2c68d55..44d6973 100644 --- a/functions/utilities/exportFigureGUI.m +++ b/functions/utilities/exportFigureGUI.m @@ -113,7 +113,7 @@ figSelectionDropDown = uidropdown(fig, ... 'ValueChangedFcn', @(src, event) updatePreview()); % Automatically update preview if only one figure exists -if length(figHandles) == 1 +if isscalar(figHandles) updatePreview(); end @@ -142,7 +142,7 @@ previewButton = uibutton(fig, 'Text', 'Update preview', ... figSelectionDropDown.Items = figNames; % Automatically update preview if only one valid figure exists - if length(figHandles) == 1 + if isscalar(figHandles) updatePreview(); end end @@ -166,7 +166,7 @@ previewButton = uibutton(fig, 'Text', 'Update preview', ... end end - if isempty(selectedFig) && length(figHandles) == 1 + if isempty(selectedFig) && isscalar(figHandles) selectedFig = figHandles(1); end @@ -181,9 +181,41 @@ previewButton = uibutton(fig, 'Text', 'Update preview', ... delete(findall(uiPanel, 'Type', 'axes')); % Copy the axes into the UI Panel - newAx = copyobj(obj.Children, uiPanel); + check = size(obj.Children); + if check(1) == 1 + newAx = copyobj(obj.Children, uiPanel); + hold(newAx, 'on'); + end + if check(1) == 2 % geoplots or 3d plots or tabfigures + if isa(obj.Children(1), 'matlab.ui.container.TabGroup') + numTabs = numel(obj.Children(1).Children); % Get number of tabs + originalFigNum = obj.Number; % Get the original figure number + + for i = 1:numTabs + newFigName = sprintf('Figure %d - Tab %d', originalFigNum, i); + newFig = figure('Name', newFigName, 'NumberTitle', 'off'); + + newAx = copyobj(obj.Children(1).Children(i).Children, newFig); + + set(newAx, 'Position', get(gca, 'Position')); + hold(newAx, 'on'); + end + else + newAx = copyobj(obj.Children(2), uiPanel); + hold(newAx, 'on'); + end + end + if check(1) > 2 + if isa(obj.Children(1), 'matlab.graphics.illustration.Legend') + newAx = copyobj(obj.Children(2:end), uiPanel); + hold(newAx(1:check(1)-1), 'on'); + else + newAx = copyobj(obj.Children, uiPanel); + hold(newAx, 'on'); + end + end %set(newAx, 'Position', [0.1, 0.1, 0.8, 0.8]); % Adjust position in panel - hold(newAx, 'on'); + %hold(newAx, 'on'); % Apply user settings linesInPlot = findall(newAx, 'Type', 'line'); @@ -222,7 +254,7 @@ previewButton = uibutton(fig, 'Text', 'Update preview', ... satelliteMapColorsBox.ValueChangedFcn = @(src, event) updatePreview(); legendLocationDropDown.ValueChangedFcn = @(src, event) updatePreview(); legendOrientationDropDown.ValueChangedFcn = @(src, event) updatePreview(); - + hold(newAx, 'off'); end @@ -294,35 +326,39 @@ previewButton = uibutton(fig, 'Text', 'Update preview', ... overwriteFigure = overwriteFigureBox.Value; selectedIdx = figSelectionDropDown.Value; - figToExp = figHandles(strcmp(figSelectionDropDown.Items, selectedIdx)); - previewStandardizedFigure(figToExp, percTextwidth, ... - 'addMarkers', addMarkers, ... - 'forcedMarkers', forcedMarkers, ... - 'changeColors', changeColors, ... - 'changeLineStyle', changeLineStyle, ... - 'grid', gridOption, ... - 'legendLocation', legendLocation, ... - 'legendOrientation', legendOrientation, ... - 'exportPDF', exportPDF, ... - 'exportFIG', exportFIG, ... - 'satelliteMapColors', satelliteMapColors, ... - 'WHratio', WHratio, ... - 'overwriteFigure', overwriteFigure); + figToExp = figHandles(strcmp(figSelectionDropDown.Items, selectedIdx)); + previewStandardizedFigure(figToExp, percTextwidth, ... + 'addMarkers', addMarkers, ... + 'forcedMarkers', forcedMarkers, ... + 'changeColors', changeColors, ... + 'changeLineStyle', changeLineStyle, ... + 'grid', gridOption, ... + 'legendLocation', legendLocation, ... + 'legendOrientation', legendOrientation, ... + 'exportPDF', exportPDF, ... + 'exportFIG', exportFIG, ... + 'satelliteMapColors', satelliteMapColors, ... + 'WHratio', WHratio, ... + 'overwriteFigure', overwriteFigure); end -end +end - function figHandles = findFigures(fig) - figHandles = findall(0, 'Type', 'figure'); - figHandles(figHandles == fig) = []; % Exclude GUI figure - end +function figHandles = findFigures(fig) +figHandles = findall(0, 'Type', 'figure'); +figHandles(figHandles == fig) = []; % Exclude GUI figure +end - function figNames = getFigureNames(figHandles) - if isempty(figHandles) - figNames = {'No figures open'}; - else - figNames = arrayfun(@(f) sprintf('Figure %d', f.Number), figHandles, 'UniformOutput', false); - end +function figNames = getFigureNames(figHandles) + if isempty(figHandles) + figNames = {'No figures open'}; + else + figNames = arrayfun(@(f) sprintf('%s', f.Name), figHandles, 'UniformOutput', false); + % Replace empty names with "Figure #" + emptyNames = cellfun(@isempty, figNames); + figNames(emptyNames) = arrayfun(@(f) ... + sprintf('Figure %d', f.Number), figHandles(emptyNames), 'UniformOutput', false); end +end %% Further developments % File Path Input -- GitLab