📄 bfm_plot_scores_ui.m
字号:
%
% Usage: fig = bfm_plot_scores_ui(LINK, fname, is_design_plot);
%
function bfm_plot_scores_ui(varargin)
if ~ischar(varargin{1})
is_design_plot = varargin{1};
fig = [];
[tmp tit_fn] = rri_fileparts(get(gcf,'name'));
fig_hdl = init(is_design_plot, tit_fn);
% fig_hdl = init(b_scores,d_scores,designlv, ...
% perm_result,conditions,evt_list,fname);
if ~isempty(fig_hdl)
link_info.hdl = gcbf;
link_info.name = 'ScorePlotHdl';
setappdata(fig_hdl,'LinkFigureInfo',link_info);
setappdata(gcbf,'ScorePlotHdl',fig_hdl);
lv_idx = getappdata(gcbf,'CurrLVIdx');
if (lv_idx ~= 1)
bfm_plot_scores_ui('UPDATE_LV_SELECTION',fig_hdl,lv_idx);
end
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
SetupSlider;
DisplayLVButtons;
PlotBrainDesignScores;
PlotDesignScores;
set(gcf,'Pointer',old_pointer);
end
return;
% if (fig_hdl == -1),
% close(gcf);
% return;
% end;
end
% clear the message line,
%
h = findobj(gcf,'Tag','MessageLine');
set(h,'String','');
action = upper(varargin{1});
switch (action),
case {'RESIZE_FIGURE'},
SetObjectPositions;
PlotBrainDesignScores;
PlotDesignScores;
case {'MOVE_SLIDER'},
MoveSlider;
case {'SET_TOP_LV_BUTTON'},
lv_idx = varargin{2};
SetTopLVButton(lv_idx);
case {'TOGGLE_LEGEND'},
ToggleLegend;
case {'TOGGLE_BRAIN_DESIGN_SCORES'},
ToggleBrainDesignScores;
case {'TOGGLE_DESIGN_SCORES'},
ToggleDesignScores;
case {'TOGGLE_PERM_DESIGN_LV'},
ToggleDesignLV;
case {'UPDATE_LV_SELECTION'},
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
fig_hdl = varargin{2};
lv_idx = varargin{3};
figure(fig_hdl); % may be calling from another figure
SelectLV(lv_idx);
PlotBrainDesignScores;
PlotDesignScores;
PlotDesignLV;
set(gcf,'Pointer',old_pointer);
case {'SELECT_LV'},
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
SelectLV;
PlotBrainDesignScores;
PlotDesignScores;
PlotDesignLV;
set(gcf,'Pointer',old_pointer);
case {'DELETE_FIGURE'}
delete_fig;
otherwise
disp(sprintf('ERROR: Unknown action "%s"',action));
end;
return; % bfm_plot_scores_ui
%---------------------------------------------------------------------------
function hh = init(is_design_plot, tit_fn)
%function fig_hdl = init(b_scores,d_scores,designlv, ...
% perm_result,conditions,evt_list,PLSresultFile)
tit = ['PLS Scores Plot [', tit_fn, ']'];
hh = [];
scores_fig = getappdata(gcbf,'ScorePlotHdl');
if ~isempty(scores_fig)
msg = 'ERROR: Scores Plot is already been opened';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
h0 = findobj(gcbf,'Tag','ResultFile');
PLSresultFile = get(h0,'UserData');
save_setting_status = 'on';
bfm_plot_scores_pos = [];
try
load('pls_profile');
catch
end
if ~isempty(bfm_plot_scores_pos) & strcmp(save_setting_status,'on')
pos = bfm_plot_scores_pos;
else
w = 0.85;
h = 0.75;
x = (1-w)/2;
y = (1-h)/2;
pos = [x y w h];
end
hh = figure('Units','normal', ...
'user','PLS Scores Plot', ...
'name',tit, ...
'NumberTitle','off', ...
'Color', [0.8 0.8 0.8], ...
'DoubleBuffer','on', ...
'Menubar', 'none', ...
'DeleteFcn', 'bfm_plot_scores_ui(''DELETE_FIGURE'');', ...
'Position',pos, ...
'Tag','PlotScoresFig');
x = 0.03;
y = 0.2;
w = 0.18;
h = 0.74;
pos = [x y w h];
h0 = uicontrol('Parent',hh, ...
'Units','normal', ...
'BackgroundColor', [0.8 0.8 0.8], ...
'Style', 'frame', ...
'Position', pos, ...
'HorizontalAlignment', 'left',...
'Tag', 'LVFrame');
x = 0.06;
y = 0.9;
w = 0.12;
h = 0.05;
pos = [x y w h];
h0 = uicontrol('Parent',hh, ...
'Units','normal', ...
'BackgroundColor', [0.8 0.8 0.8], ...
'Style', 'text', ...
'Position', pos, ...
'HorizontalAlignment', 'left',...
'FontUnits', 'normal', ...
'FontSize', 0.5, ...
'String', ' Display LVs', ...
'Tag', 'DisplayLVLabel');
x = 0.07;
y = 0.85;
w = 0.1;
pos = [x y w h];
% the font normal does not work here
lv_h = uicontrol('Parent',hh, ...
'Units','normal', ...
'BackgroundColor', [0.8 0.8 0.8], ...
'Style', 'radiobutton', ...
'Position', pos, ...
'HorizontalAlignment', 'center',...
'FontUnits', 'point', ...
'FontSize', 10, ...
'String', 'LV #1', ...
'Visible', 'off', ...
'Callback','bfm_plot_scores_ui(''SELECT_LV'');', ...
'Tag', 'LVRadioButton');
x = x+w+.01;
w = 0.02;
pos = [x y w h];
h0 = uicontrol('Parent',hh, ... % LV Button Slider
'Style','slider', ...
'Units','normal', ...
'Min', 0, ...
'Max', 1, ...
'Visible', 'off', ...
'Position',pos, ...
'Callback','bfm_plot_scores_ui(''MOVE_SLIDER'');', ...
'Tag','LVButtonSlider');
x = 0.07;
y = 0.08;
w = 0.1;
pos = [x y w h];
h0 = uicontrol('Parent',hh, ...
'Units','normal', ...
'Style', 'push', ...
'Position', pos, ...
'FontUnits', 'normal', ...
'FontSize', 0.5, ...
'String', 'Close', ...
'CallBack', 'close(gcf)', ...
'Tag', 'CloseButton');
x = 0.01;
y = 0;
w = .5;
h = 0.04;
pos = [x y w h];
h0 = uicontrol('Parent',hh, ... % Message Line
'Style','text', ...
'Units','normal', ...
'BackgroundColor',[0.8 0.8 0.8], ...
'ForegroundColor',[0.8 0.0 0.0], ...
'FontUnits', 'normal', ...
'FontSize', 0.6, ...
'HorizontalAlignment','left', ...
'Position',pos, ...
'String','', ...
'Tag','MessageLine');
rri_file_menu(hh);
h_menu = uimenu('Parent',hh, ...
'Label','&View', ...
'Tag','ViewMenu');
h0 = uimenu('Parent',h_menu, ...
'Label','&Hide Legend', ...
'Userdata',1, ... % show legend
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_LEGEND'');', ...
'Tag','LegendMenu');
if(is_design_plot)
h0 = uimenu('Parent',h_menu, ...
'Label','Hide &Design Scores', ...
'Userdata',1, ... % show design scores
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_DESIGN_SCORES'');', ...
'Tag','DesignMenu');
h0 = uimenu('Parent',h_menu, ...
'Label','Hide &Brain vs Design Scores', ...
'Userdata',1, ... % show brain vs design scores
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_BRAIN_DESIGN_SCORES'');', ...
'Tag','BrainDesignMenu');
h0 = uimenu('Parent',h_menu, ...
'Label','Show Design &Latent Variables', ...
'Userdata',0, ... % show permutation design lv
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_PERM_DESIGN_LV'');', ...
'Tag','DesignLVMenu');
else
h0 = uimenu('Parent',h_menu, ...
'Label','Hide Be&havior Scores', ...
'Userdata',1, ... % show behavior scores
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_DESIGN_SCORES'');', ...
'Tag','BehavMenu');
h0 = uimenu('Parent',h_menu, ...
'Label','Hide &Brain vs Behavior Scores', ...
'Userdata',1, ... % show brain vs behavior scores
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_BRAIN_DESIGN_SCORES'');', ...
'Tag','BrainBehavMenu');
h0 = uimenu('Parent',h_menu, ...
'Label','Show Behavior &Latent Variables', ...
'Userdata',0, ... % show permutation behavior lv
'CallBack', 'bfm_plot_scores_ui(''TOGGLE_PERM_DESIGN_LV'');', ...
'Tag','BehavLVMenu');
end
% set up the axes for plotting
%
% 'FontUnits', 'normal', ...
% 'FontSize', 0.07, ...
% axes font were not normalized because the Legend can't display properly
%
%
x = 0.28;
y = 0.1;
w = 0.69;
h = 0.85;
pos = [x y w h];
handle_main_axes = axes('units','normal', ...
'box', 'on', ...
'tickdir', 'out', ...
'ticklength', [0.005 0.005], ...
'fontsize', 10, ...
'xtickmode', 'auto', ...
'xticklabelmode', 'auto', ...
'ytickmode', 'auto', ...
'yticklabelmode', 'auto', ...
'Tag','ScoreAxes', ...
'Visible','off', ...
'position',pos);
h = 0.37;
pos = [x y w h];
handle_bottom_axes = axes('units','normal', ...
'box', 'on', ...
'tickdir', 'out', ...
'ticklength', [0.005 0.005], ...
'fontsize', 10, ...
'xtickmode', 'auto', ...
'xticklabelmode', 'auto', ...
'ytickmode', 'auto', ...
'yticklabelmode', 'auto', ...
'Tag','ScoreAxesBottom', ...
'position',pos);
y = 0.58;
pos = [x y w h];
handle_top_axes = axes('units','normal', ...
'box', 'on', ...
'tickdir', 'out', ...
'ticklength', [0.005 0.005], ...
'fontsize', 10, ...
'xtickmode', 'auto', ...
'xticklabelmode', 'auto', ...
'ytickmode', 'auto', ...
'yticklabelmode', 'auto', ...
'Tag','ScoreAxesTop', ...
'position',pos);
% if ~isempty(PLSresultFile)
% set(hh,'Name',sprintf('PLS Scores Plot: %s',PLSresultFile));
% end;
lv_template = copyobj(lv_h,gcf);
set(lv_template,'Tag','LVTemplate','Visible','off');
[b_scores,d_scores,designlv,s,perm_result,conditions, ...
num_conds,num_subjs_grp1,fname]=...
load_pls_scores(PLSresultFile, is_design_plot);
if isempty(b_scores)
return;
end
num_lv = size(b_scores,2);
curr_lv_state = zeros(1,num_lv);
curr_lv_state(1) = 1;
setappdata(gcf,'BrainScores',b_scores);
setappdata(gcf,'DesignScores',d_scores);
setappdata(gcf,'DesignLV',designlv);
setappdata(gcf,'s',s);
setappdata(gcf,'PermutationResult',perm_result);
setappdata(gcf,'Conditions',conditions);
setappdata(gcf,'num_conds',num_conds);
setappdata(gcf,'num_subjs_grp1',num_subjs_grp1);
setappdata(gcf,'CurrLVState',curr_lv_state);
% for GUI
setappdata(gcf,'LVButtonHeight',0.05);
setappdata(gcf,'LV_hlist',[lv_h]);
setappdata(gcf,'LVButtonTemplate',lv_template);
setappdata(gcf,'TopLVButton',1);
setappdata(gcf,'ScoreAxes',handle_main_axes);
setappdata(gcf,'ScoreAxes_bottom',handle_bottom_axes);
setappdata(gcf,'ScoreAxes_top',handle_top_axes);
setappdata(gcf,'PlotDesignState',1);
setappdata(gcf,'PlotBrainDesignState',1)
setappdata(gcf,'PlotDesignLVState',0);
setappdata(gcf, 'is_design_plot', is_design_plot);
SetupLVButtonRows;
DisplayLVButtons;
return; % init
% --------------------------------------------------------------------
function SetupLVButtonRows()
lv_hdls = getappdata(gcf,'LV_hlist');
lv_template = getappdata(gcf,'LVButtonTemplate');
row_height = getappdata(gcf,'LVButtonHeight');
frame_pos = get(findobj(gcf,'Tag','LVFrame'),'Position');
first_button_pos = get(findobj(gcf,'Tag','LVRadioButton'),'Position');
top_frame_pos = frame_pos(2) + frame_pos(4);
margin = top_frame_pos - (first_button_pos(2) + first_button_pos(4));
rows = floor((frame_pos(4) - margin*1.5) / row_height);
v_pos = (top_frame_pos - margin) - [1:rows]*row_height;
nr = size(lv_hdls,1);
if (rows < nr) % too many rows
for i=rows+1:nr,
delete(lv_hdls(i));
end;
lv_hdls = lv_hdls(1:rows);
else % add more rows
for i=nr+1:rows,
new_s_hdls = copyobj(lv_template,gcf);
lv_hdls = [lv_hdls; new_s_hdls'];
end;
end;
v = 'on';
for i=1:rows,
new_s_hdls = lv_hdls(i);
pos = get(new_s_hdls(1),'Position'); pos(2) = v_pos(i);
set(new_s_hdls,'String','','Position',pos,'Visible',v,'UserData',i);
end;
% setup slider position
%
h = findobj(gcf,'Tag','LVButtonSlider');
s_pos = get(h,'Position');
s_pos(2) = v_pos(end);
s_pos(4) = v_pos(1) - v_pos(end) + row_height;
set(h,'Position',s_pos);
setappdata(gcf,'LV_hlist',lv_hdls);
setappdata(gcf,'NumLVRows',rows);
return; % SetupLVButtonRows
% --------------------------------------------------------------------
function DisplayLVButtons()
curr_lv_state = getappdata(gcf,'CurrLVState');
top_lv_button = getappdata(gcf,'TopLVButton');
lv_hdls = getappdata(gcf,'LV_hlist');
rows = getappdata(gcf,'NumLVRows');
num_lvs = length(curr_lv_state);
lv_idx = top_lv_button;
for i=1:rows,
l_hdl = lv_hdls(i);
if (lv_idx <= num_lvs),
set(lv_hdls(i),'String',sprintf('LV #%d',lv_idx), ...
'Value',curr_lv_state(lv_idx), ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -