pet_plot_detail_stim_ui.m
来自「绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX」· M 代码 · 共 296 行
M
296 行
% draw subplot for selected channels in the calling figure
% h0 is the handle of calling figure
%
%----------------------------------------------------------
function h01 = pet_plot_detail_stim_ui(action,varargin)
if strcmp(action,'STARTUP')
h0 = gcbf;
h01 = init(h0,varargin{1},varargin{2},varargin{3}, ...
varargin{4},varargin{5},varargin{6});
elseif strcmp(action,'fig_bt_dn')
fig_bt_dn;
elseif strcmp(action,'select_subj')
select_subj;
elseif strcmp(action,'delete_fig')
delete_fig;
end
return;
%-----------------------------------------------------------
%
function h02 = init(h0,st_data,condition,axes_margin,plot_dims,cond_idx,tit)
save_setting_status = 'on';
pet_detailplot_pos = [];
pet_detail_user = [];
try
pet_detail_user = get(getappdata(gcf,'pet_detail_hdl'),'user');
catch
end
if ~isempty(pet_detail_user) & strcmp(pet_detail_user,'PET Detail Plot')
h02 = getappdata(gcf,'pet_detail_hdl');
figure(h02);
else
try
load('pls_profile');
catch
end
if ~isempty(pet_detailplot_pos) & strcmp(save_setting_status,'on')
pos = pet_detailplot_pos;
else
w = 0.9;
h = 0.8;
x = (1-w)/2;
y = (1-h)/2;
pos = [x y w h];
end
xp = 0.0227273;
yp = 0.0294118;
wp = 1-2*xp;
hp = 1-2*yp;
pos_p = [xp yp wp hp];
h02 = figure('unit','normal', ...
'paperunit','normal', ...
'paperorient','land', ...
'paperposition',pos_p, ...
'papertype','usletter', ...
'numberTitle','off', ...
'menubar', 'none', ...
'toolbar','none', ...
'user', 'PET Detail Plot', ...
'name', [tit, ' plot per LV'], ...
'deleteFcn','pet_plot_detail_stim_ui(''delete_fig'');', ...
'tag','detail_fig', ...
'position', pos);
% file menu
%
rri_file_menu(h02);
end
cond_name = condition.cond_name;
subj_name = condition.subj_name;
plotmarkercolour=[
'bo';'rd';'g<';'m>';'bs';'rv';'g^';'mp';'bh';'rx';'g+';'m*';
'ro';'gd';'m<';'b>';'rs';'gv';'m^';'bp';'rh';'gx';'m+';'b*';
'go';'md';'b<';'r>';'gs';'mv';'b^';'rp';'gh';'mx';'b+';'r*';
'mo';'bd';'r<';'g>';'ms';'bv';'r^';'gp';'mh';'bx';'r+';'g*'];
if length(subj_name)>length(plotmarkercolour) % need more color
tmp = [];
for i=1:ceil( length(subj_name)/length(plotmarkercolour) )
tmp = [tmp; plotmarkercolour];
end
plotmarkercolour = tmp;
end
linc_wave = st_data.linc_wave;
brain_wave = st_data.brain_wave;
behav_wave = st_data.behav_wave;
behavname = st_data.behavname;
strong_r = st_data.strong_r;
brainscores = getappdata(gcbf, 'brainscores');
behavdata = getappdata(gcbf, 'behavdata');
% min_x = min(behavdata(:)); max_x = max(behavdata(:));
min_y = min(brainscores(:)); max_y = max(brainscores(:));
% margin_x = abs((max_x - min_x) / 20);
margin_y = abs((max_y - min_y) / 20);
numbehav = size(behav_wave, 2);
num_conds = size(behav_wave, 3);
num_selected = numbehav * num_conds;
c = ceil(sqrt(num_selected)); % amount cols for subplot
r = ceil(num_selected/c); % amount rows for subplot
if c==2 & r==1 % only 2 channels selected
c=2; r=2; % make it square
end
for i=1:numbehav
per_behav = behav_wave(:,i,:);
min_x = min(per_behav(:)); max_x = max(per_behav(:));
margin_x = abs((max_x - min_x) / 20);
for j=1:num_conds
k=(i-1)*num_conds + j;
subplot(r,c,k);
pos = get(gca,'position');
xy = pos(1:2);
w = pos(3);
h = pos(4);
w = w * .9;
h = h * .6;
pos = [xy,w,h];
set(gca,'position',pos);
set(gca, 'xgrid', 'on', 'ygrid', 'on', 'box', 'on');
set(gca,'buttondown','pet_plot_cond_stim_ui(''fig_bt_dn'');');
% set(get(gca,'xlabel'), 'string', ['Behavior Name: ', behavname{i}]);
set(get(gca,'ylabel'), 'string', tit);
task_tit{1} = ['Behavior Name: ', behavname{i}];
task_tit{2} = ['Task Name: ', cond_name{j}];
LV = num2str(find(getappdata(gcbf, 'CurrLVState')));
task_tit{3} = ['LV=',LV,', r=',num2str(strong_r(1,i,j),2)];
set(get(gca,'title'), 'string', task_tit);
hold on;
plot(behav_wave(:,i,j), linc_wave(:,i,j));
for n=1:length(subj_name)
score_hdl(i,j,n) = plot(behav_wave(n,i,j), ...
brain_wave(n,1,j),plotmarkercolour(n,:), ...
'MarkerSize',10, 'userdata', n, 'buttondown', ...
'pet_plot_detail_stim_ui(''select_subj'');');
end
axis([min_x-margin_x, max_x+margin_x, min_y-margin_y, max_y+margin_y]);
hold off;
end
end
tit_fn = getappdata(gcbf,'tit_fn');
if isempty(findstr(tit_fn, 'ERPresult.mat')) % brain scores
tit = ['Brain Scores Overview [', tit_fn, ']'];
setappdata(gcf, 'is_erp', 0);
else % scalp scores
tit = ['Scalp Scores Overview [', tit_fn, ']'];
setappdata(gcf, 'is_erp', 1);
end
set(gcf,'name',tit);
setappdata(gcf, 'score_hdl', score_hdl);
setappdata(gcf,'ST_data',st_data);
setappdata(gcf,'ST_condition',condition);
setappdata(gcf,'PlotCondIdx',cond_idx);
setappdata(gcf,'PlotDims',plot_dims);
return;
%--------------------------------------------------------------
%
function delete_fig
is_erp = getappdata(gcbf,'is_erp');
try
load('pls_profile');
pls_profile = which('pls_profile.mat');
pet_detailplot_pos = get(gcbf,'position');
save(pls_profile, '-append', 'pet_detailplot_pos');
catch
end
h0 = getappdata(gcbf,'main_fig');
if ishandle(h0)
setappdata(h0,'PlotDetailState',0);
hm_detail = findobj(h0,'Tag','DetailMenu');
if is_erp
set(hm_detail,'Label','Show &Scalp Scores Overview');
else
set(hm_detail,'Label','Show &Brain Scores Overview');
end
end
return; % delete_fig
%-----------------------------------------------------------
%
function fig_bt_dn()
score_hdl = getappdata(gcf,'score_hdl');
for i=1:length(score_hdl(:))
set(score_hdl(i), 'selected', 'off'); % remove selection
end
try
txtbox_hdl = getappdata(gcf,'txtbox_hdl');
delete(txtbox_hdl); % clear rri_txtbox
catch
end
return; % fig_bt_dn
%-----------------------------------------------------------
%
function select_subj
% don't do anything if we're supposed to be zooming
tmp = zoom(gcf,'getmode');
if (isequal(tmp,'in') | isequal(tmp,'on')), return; end
score_hdl = getappdata(gcf,'score_hdl');
st_data = getappdata(gcf,'ST_data');
condition = getappdata(gcf,'ST_condition');
subj_name = condition.subj_name;
behav_wave = st_data.behav_wave;
numbehav = size(behav_wave, 2);
num_conds = size(behav_wave, 3);
for i=1:length(score_hdl(:))
set(score_hdl(i), 'selected', 'off'); % remove selection
end
for i=1:numbehav
for j=1:num_conds
n = get(gco, 'userdata');
set(score_hdl(i,j,n),'selected','on');
end
end
txtbox_hdl = rri_txtbox(gca, 'Subject Name', subj_name{n});
setappdata(gcf, 'txtbox_hdl', txtbox_hdl);
return; % select_subj
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?