From 431eafecb072c1dd03607ca0688342e95615e724 Mon Sep 17 00:00:00 2001 From: Jim Pollaro Date: Thu, 2 Jul 2026 11:59:53 -0500 Subject: [PATCH 1/4] added scaling and colormap choice to chords --- +nla/+net/+result/+chord/ChordPlotter.m | 112 +++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/+nla/+net/+result/+chord/ChordPlotter.m b/+nla/+net/+result/+chord/ChordPlotter.m index 27272895..32dce50e 100644 --- a/+nla/+net/+result/+chord/ChordPlotter.m +++ b/+nla/+net/+result/+chord/ChordPlotter.m @@ -9,6 +9,8 @@ axis_width = 750; % Constant for the size of the chord trimatrix_width = 500; % Constant for the size of the Trimatrix plotted with bottom_text_height = 250; % How far from the bottom of the trimatrix the text appears + colormap_choices = {"Parula", "Turbo", "HSV", "Hot", "Cool", "Spring", "Summer", "Autumn", "Winter", "Gray",... + "Bone", "Copper", "Pink"}; % Colorbar choices end properties @@ -16,6 +18,7 @@ edge_test_result % Edge test results split_plot = false % This is an option that is set automatically during operation. edge_plot_type = "nla.gfx.EdgeChordPlotMethod.PROB" % Default chord type for edges + chord_plotter = false end methods @@ -35,6 +38,9 @@ function generateChordFigure(obj, parameters, chord_type) import nla.gfx.SigType nla.net.result.plot.PermutationTestPlotter nla.gfx.EdgeChordPlotMethod nla.gfx.setTitle coefficient_bounds = [0, parameters.p_value_plot_max]; + if isfield(parameters, "lower_bound") + coefficient_bounds(1) = parameters.lower_bound; + end if parameters.significance_type == SigType.INCREASING && parameters.p_value_plot_max < 1 coefficient_bounds = [parameters.p_value_plot_max, 1]; end @@ -68,15 +74,21 @@ function generateChordFigure(obj, parameters, chord_type) % thresholding below the "insignificance" value statistic_matrix = copy(parameters.statistic_plot_matrix); statistic_matrix.v(~parameters.significance_plot.v) = insignificance; - chord_plotter = nla.gfx.chord.ChordPlot(obj.network_atlas, figure_axis, 500, statistic_matrix,... + obj.chord_plotter = nla.gfx.chord.ChordPlot(obj.network_atlas, figure_axis, 500, statistic_matrix,... 'color_map', parameters.color_map, 'direction', parameters.significance_type, 'upper_limit',... coefficient_bounds(2), 'lower_limit', coefficient_bounds(1), 'chord_type', chord_type); - chord_plotter.drawChords(); + obj.chord_plotter.drawChords(); setTitle(figure_axis, parameters.name_label) else % Plot edge chord obj.generateEdgeChordFigure(plot_figure, parameters, chord_type) end + + settings_menu = uimenu(plot_figure, 'Text', 'Settings'); + change_scale_option = uimenu(settings_menu,'Text','Change Scale'); + change_scale_option.MenuSelectedFcn = {@obj.adjustScale, coefficient_bounds, plot_figure, parameters, chord_type}; + change_color_map = uimenu(settings_menu, 'Text', 'Change Color Map'); + change_color_map.MenuSelectedFcn = {@obj.adjustColor, plot_figure, parameters, chord_type}; end end @@ -199,5 +211,101 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) end color_bar.TickLabels = labels; end + + function adjustScale(obj, src, ~, bounds, plot_figure, parameters, chord_type) + chord_figure = src.Parent.Parent; + modal = figure('WindowStyle', 'normal', 'Units', 'pixels', 'Position',... + [chord_figure.Position(1), chord_figure.Position(2), chord_figure.Position(3) / 3, chord_figure.Position(4) / 3]); + + upper_limit_box = uicontrol('Style', 'edit', "Units", "pixels", 'Position', [90, 130, 100, 30], "String",... + bounds(2)); + upper_limit_box.Position(4) = upper_limit_box.FontSize * 2; + lower_limit_box = uicontrol('Style', 'edit', "Units", "pixels", 'Position', [90, 100, 100, 30], "String",... + bounds(1)); + lower_limit_box.Position(4) = lower_limit_box.FontSize * 2; + + uicontrol('Style', 'text', 'String', 'Upper Limit', "Units", "pixels", 'Position',... + [upper_limit_box.Position(1) - 80, upper_limit_box.Position(2) - 2, 80, upper_limit_box.Position(4)]); + uicontrol('Style', 'text', 'String', 'Lower Limit', "Units", "pixels", 'Position',... + [lower_limit_box.Position(1) - 80, lower_limit_box.Position(2) - 2, 80, lower_limit_box.Position(4)]); + + apply_button_position = [10, 10, 100, 30]; + apply_button = uicontrol('String', 'Apply',... + "Callback", {@obj.applyScale, upper_limit_box, lower_limit_box, false, plot_figure, parameters, chord_type},... + "Units", "pixels",... + 'Position', apply_button_position); + + close_button_position = [apply_button.Position(1) + apply_button.Position(3) + 10,... + apply_button.Position(2), apply_button.Position(3), apply_button.Position(4)]; + uicontrol('String', 'Close', 'Callback', @(~, ~)close(modal), "Units", "pixels", 'Position',... + close_button_position); + end + + function adjustColor(obj, src, ~, plot_figure, parameters, chord_type) + chord_figure = src.Parent.Parent; + modal = figure('WindowStyle', 'normal', 'Units', 'pixels', 'Position',... + [chord_figure.Position(1), chord_figure.Position(2), chord_figure.Position(3) / 2, chord_figure.Position(4) / 3]); + + % Color Map selector + % Adapted from colormap-dropdown: https://www.mathworks.com/matlabcentral/fileexchange/43659-colormap-dropdown-menu + + color_map_select = uicontrol('Style', 'popupmenu',... + 'Position', [90, 130, 275, 30], "Units", "pixels",... + 'FontName', 'Courier'); + uicontrol("Style", "text", "string", "Colormaps", "Units", "pixels",... + "Position", [color_map_select.Position(1) - 80, color_map_select.Position(2) - 2, 80, color_map_select.Position(4)]); + initial_colors = 16; + colormap_html = {}; + for colors = 1:numel(obj.colormap_choices) + colormap_function = str2func(strcat(strcat("@(x) ",lower(obj.colormap_choices{colors})), "(x)")); + CData = colormap_function(initial_colors); + new_html_start = ' '; + new_html = ''; + for color_iterator = initial_colors:-1:1 + hex_code = nla.gfx.rgb2hex([CData(color_iterator, 1), CData(color_iterator, 2),... + CData(color_iterator, 3)]); + new_html = [new_html '__']; + end + new_html_end = [new_html ' ']; + new_html = [new_html_start new_html_end]; + colormap_html = [colormap_html; new_html]; + end + + if ~isfield(parameters, "color_map_name") + parameters.color_map_name = 1; + end + set(color_map_select, "Value", parameters.color_map_name, "String", colormap_html); + + apply_button_position = [10, 10, 100, 30]; + apply_button = uicontrol('String', 'Apply',... + "Callback", {@obj.applyScale, false, false, color_map_select, plot_figure, parameters, chord_type},... + "Units", "pixels",... + 'Position', apply_button_position); + + close_button_position = [apply_button.Position(1) + apply_button.Position(3) + 10,... + apply_button.Position(2), apply_button.Position(3), apply_button.Position(4)]; + uicontrol('String', 'Close', 'Callback', @(~, ~)close(modal), "Units", "pixels", 'Position',... + close_button_position); + end + + function applyScale(obj, src, ~, upper_limit_box, lower_limit_box, color_map, plot_figure, parameters, chord_type) + + if ~isequal(upper_limit_box, false) + parameters.p_value_plot_max = str2double(get(upper_limit_box, "String")); + parameters.lower_bound = str2double(get(lower_limit_box, "String")); + end + + if ~isequal(color_map, false) + color_map = get(color_map, "Value"); + color_map_name = str2func(lower(obj.colormap_choices{color_map})); + parameters.color_map = color_map_name(1000); + parameters.color_map_name = color_map; + end + + obj.generateChordFigure(parameters, chord_type) + + close(plot_figure); + close(src.Parent); + end end end \ No newline at end of file From 6226dca8a950049af5105740c325f9138804810f Mon Sep 17 00:00:00 2001 From: Jim Pollaro Date: Mon, 6 Jul 2026 11:23:17 -0500 Subject: [PATCH 2/4] hopefully centering plots together --- +nla/+net/+result/+chord/ChordPlotter.m | 7 +++++-- .../+result/+plot/NetworkTestPlotApp.mlapp | Bin 38472 -> 38471 bytes 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/+nla/+net/+result/+chord/ChordPlotter.m b/+nla/+net/+result/+chord/ChordPlotter.m index 32dce50e..56e9e9fa 100644 --- a/+nla/+net/+result/+chord/ChordPlotter.m +++ b/+nla/+net/+result/+chord/ChordPlotter.m @@ -33,7 +33,7 @@ end end - function generateChordFigure(obj, parameters, chord_type) + function generateChordFigure(obj, parameters, chord_type, parent_figure) % generateChordFigure plots chords for a network test import nla.gfx.SigType nla.net.result.plot.PermutationTestPlotter nla.gfx.EdgeChordPlotMethod nla.gfx.setTitle @@ -59,6 +59,9 @@ function generateChordFigure(obj, parameters, chord_type) else plot_figure = nla.gfx.createFigure(obj.axis_width , obj.axis_width); end + if ~isequal(parent_figure, false) + nla.gfx.moveFigToParentUILocation(plot_figure, parent_figure); + end % Plot a standard chord plot if chord_type == "nla.PlotType.CHORD" @@ -302,7 +305,7 @@ function applyScale(obj, src, ~, upper_limit_box, lower_limit_box, color_map, pl parameters.color_map_name = color_map; end - obj.generateChordFigure(parameters, chord_type) + obj.generateChordFigure(parameters, chord_type, plot_figure) close(plot_figure); close(src.Parent); diff --git a/+nla/+net/+result/+plot/NetworkTestPlotApp.mlapp b/+nla/+net/+result/+plot/NetworkTestPlotApp.mlapp index 317585b60cd60d7cb0bd5f1a5a04f38b51bdc84a..636bf1f61873d496052069496244fea480fb00f0 100644 GIT binary patch delta 32928 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%0ACBqif{vt*rC9Gf{6QcGA^Q3>gW%^)*O@9TP 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 delta 32920 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 From 31211161152176728f86f8d6968466b6f5ede90b Mon Sep 17 00:00:00 2001 From: Github Action Date: Mon, 6 Jul 2026 16:23:38 +0000 Subject: [PATCH 3/4] Exported mlapp files --- +nla/+net/+result/+plot/NetworkTestPlotApp_exported.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/+nla/+net/+result/+plot/NetworkTestPlotApp_exported.m b/+nla/+net/+result/+plot/NetworkTestPlotApp_exported.m index 1c7c5656..ff2ecec8 100644 --- a/+nla/+net/+result/+plot/NetworkTestPlotApp_exported.m +++ b/+nla/+net/+result/+plot/NetworkTestPlotApp_exported.m @@ -285,7 +285,7 @@ function drawChords(app, event) chord_plotter = nla.net.result.chord.ChordPlotter(app.edge_test_options.net_atlas, app.edge_test_result); probability_parameters.edge_chord_plot_method = app.EdgeChordPlotTypeDropDown.Value; - chord_plotter.generateChordFigure(probability_parameters, plot_type) + chord_plotter.generateChordFigure(probability_parameters, plot_type, false) end % Value changed function: ColormapDropDown, From 4f9410cc97a5c13e678976c8d8c84d2aab7a683f Mon Sep 17 00:00:00 2001 From: Jim Pollaro Date: Mon, 6 Jul 2026 16:24:35 -0500 Subject: [PATCH 4/4] edge chord scaling --- +nla/+net/+result/+chord/ChordPlotter.m | 80 ++++++++++++++++++------- 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/+nla/+net/+result/+chord/ChordPlotter.m b/+nla/+net/+result/+chord/ChordPlotter.m index 56e9e9fa..819416c7 100644 --- a/+nla/+net/+result/+chord/ChordPlotter.m +++ b/+nla/+net/+result/+chord/ChordPlotter.m @@ -82,27 +82,33 @@ function generateChordFigure(obj, parameters, chord_type, parent_figure) coefficient_bounds(2), 'lower_limit', coefficient_bounds(1), 'chord_type', chord_type); obj.chord_plotter.drawChords(); setTitle(figure_axis, parameters.name_label) + settings_menu = uimenu(plot_figure, 'Text', 'Settings'); + change_scale_option = uimenu(settings_menu,'Text','Change Scale'); + change_scale_option.MenuSelectedFcn = {@obj.adjustScale, coefficient_bounds, plot_figure, parameters, chord_type}; + change_color_map = uimenu(settings_menu, 'Text', 'Change Color Map'); + change_color_map.MenuSelectedFcn = {@obj.adjustColor, plot_figure, parameters, chord_type}; else % Plot edge chord - obj.generateEdgeChordFigure(plot_figure, parameters, chord_type) + obj.generateEdgeChordFigure(plot_figure, parameters, chord_type, parent_figure) end - settings_menu = uimenu(plot_figure, 'Text', 'Settings'); - change_scale_option = uimenu(settings_menu,'Text','Change Scale'); - change_scale_option.MenuSelectedFcn = {@obj.adjustScale, coefficient_bounds, plot_figure, parameters, chord_type}; - change_color_map = uimenu(settings_menu, 'Text', 'Change Color Map'); - change_color_map.MenuSelectedFcn = {@obj.adjustColor, plot_figure, parameters, chord_type}; + end end methods (Access = protected) - function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) + function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type, parent_figure) % generateEdgeChordFigure generates the edge chord plotting import nla.gfx.EdgeChordPlotMethod nla.gfx.setTitle - range_limit = std(obj.edge_test_result.coeff.v) * 5; - coefficient_min = -range_limit; - coefficient_max = range_limit; + if isfield(parameters, "lower_bound") + coefficient_min = parameters.lower_bound; + coefficient_max = parameters.p_value_plot_max; + else + range_limit = std(obj.edge_test_result.coeff.v) * 5; + coefficient_min = -range_limit; + coefficient_max = range_limit; + end clipped_values = nla.TriMatrix(obj.network_atlas.numROIs(), nla.TriMatrixDiag.REMOVE_DIAGONAL); clipped_values.v = obj.edge_test_result.coeff.v; @@ -125,21 +131,39 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) switch obj.edge_plot_type case "nla.gfx.EdgeChordPlotMethod.COEFF" main_title = positive_title; + if isfield(parameters, "lower_bound") + coefficient_min = parameters.lower_bound; + coefficient_max = parameters.p_value_plot_max; + end case "nla.gfx.EdgeChordPlotMethod.COEFF_SPLIT" main_title = negative_title; positive_main_title = positive_title; + if isfield(parameters, "lower_bound") + coefficient_min = parameters.lower_bound; + coefficient_max = parameters.p_value_plot_max; + end case "nla.gfx.EdgeChordPlotMethod.COEFF_BASE_SPLIT" - coefficient_min = obj.edge_test_result.coeff_range(1); - coefficient_max = obj.edge_test_result.coeff_range(2); + if isfield(parameters, "lower_bound") + coefficient_min = parameters.lower_bound; + coefficient_max = parameters.p_value_plot_max; + else + coefficient_min = obj.edge_test_result.coeff_range(1); + coefficient_max = obj.edge_test_result.coeff_range(2); + end main_title = negative_title; positive_main_title = positive_title; case "nla.gfx.edgeChordPlotMethod.COEFF_BASE" - coefficient_min = obj.edge_test_result.coeff_range(1); - coefficient_max = obj.edge_test_result.coeff_range(2); + if isfield(parameters, "lower_bound") + coefficient_min = parameters.lower_bound; + coefficient_max = parameters.p_value_plot_max; + else + coefficient_min = obj.edge_test_result.coeff_range(1); + coefficient_max = obj.edge_test_result.coeff_range(2); + end main_title = positive_title; @@ -149,13 +173,19 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) clipped_values.v = obj.edge_test_result.prob.v; significance_type = "nla.gfx.SigType.DECREASING"; - coefficient_min = 0; - coefficient_max = obj.edge_test_result.prob_max; + if isfield(parameters, "lower_bound") + coefficient_min = parameters.lower_bound; + coefficient_max = parameters.p_value_plot_max; + else + coefficient_min = 0; + coefficient_max = obj.edge_test_result.prob_max; + end insignificance = 1; main_title = sprintf("Edge-level P-values (P < %g) (Within Significant Net-Pair)",... obj.edge_test_result.prob_max); end + coefficient_bounds = [coefficient_min, coefficient_max]; % Filtering/Thresholding out values for network1 = 1:obj.network_atlas.numNets() @@ -180,8 +210,8 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) obj.edge_plot_type == "nla.gfx.EdgeChordPlotMethod.COEFF_SPLIT" || obj.edge_plot_type == "nla.gfx.EdgeChordPlotMethod.COEFF_BASE_SPLIT"... ) positive_chord_plotter = nla.gfx.chord.ChordPlot(obj.network_atlas, plot_axis, 450, clipped_values_positive,... - 'direction', significance_type, 'chord_type', chord_type, 'color_map', color_map, 'lower_limit',... - coefficient_min, 'upper_limit', coefficient_max); + 'direction', significance_type, 'chord_type', chord_type, 'color_map', parameters.color_map, 'lower_limit',... + coefficient_bounds(1), 'upper_limit', coefficient_bounds(2)); positive_chord_plotter.drawChords(); setTitle(plot_axis, positive_main_title); @@ -192,12 +222,12 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) plot_axis.Visible = true; end - chord_plotter = nla.gfx.chord.ChordPlot(obj.network_atlas, plot_axis, 450, clipped_values, 'chord_type', chord_type,... - 'direction', significance_type, 'color_map', color_map, 'lower_limit', coefficient_min, 'upper_limit', coefficient_max); - chord_plotter.drawChords(); + obj.chord_plotter = nla.gfx.chord.ChordPlot(obj.network_atlas, plot_axis, 450, clipped_values, 'chord_type', chord_type,... + 'direction', significance_type, 'color_map', parameters.color_map, 'lower_limit', coefficient_bounds(1), 'upper_limit', coefficient_bounds(2)); + obj.chord_plotter.drawChords(); setTitle(plot_axis, main_title); - colormap(plot_axis, color_map); + colormap(plot_axis, parameters.color_map); color_bar = colorbar(plot_axis); color_bar.Units = 'pixels'; color_bar.Location = 'east'; @@ -213,6 +243,12 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) labels{tick + 1} = sprintf("%.2g", coefficient_min + (tick * ((coefficient_max - coefficient_min) / number_ticks))); end color_bar.TickLabels = labels; + + settings_menu = uimenu(plot_figure, 'Text', 'Settings'); + change_scale_option = uimenu(settings_menu,'Text','Change Scale'); + change_scale_option.MenuSelectedFcn = {@obj.adjustScale, coefficient_bounds, plot_figure, parameters, chord_type}; + change_color_map = uimenu(settings_menu, 'Text', 'Change Color Map'); + change_color_map.MenuSelectedFcn = {@obj.adjustColor, plot_figure, parameters, chord_type}; end function adjustScale(obj, src, ~, bounds, plot_figure, parameters, chord_type)