📄 erp_showplot_ui.m
字号:
%
x_interval_pattern = [5 2 1]; % nice $ pattern
x_interval = x_interval_pattern;
while(x_interval(1) <= timepoint)
x_interval = [x_interval_pattern.*10, x_interval];
x_interval_pattern = x_interval_pattern.*10;
end
x_interval(find(x_interval > timepoint))=[]; % take out too large
x_interval(1) = []; % make large one close to half timepoint
x_interval = x_interval .* digit_interval; % become (ms)
if isempty(x_interval_selection) % default
x_interval2 = x_interval(1);
else
x_interval2 = x_interval(x_interval_selection);
end
xtick_start = ceil(start_time/x_interval2) * x_interval2;
xtick_end = floor(end_time/x_interval2) * x_interval2;
xtick_pos = [xtick_start:x_interval2:xtick_end]; % (ms)
if xtick_start > 0
xtick_pos = xtick_pos - start_time; % shift y axis
end
xtick_pos = xtick_pos ./ digit_interval; % point again
xtick_template = [];
% traverse x axis and put tick on
%
k = 1;
for j = xtick_pos
xtick_template(k,:) = copyobj(xtick_template_hdl, ha);
set(xtick_template(k,:),'xdata', ...
get(xtick_template(k,:),'xdata') ...
+ j/timepoint);
if j==0
set(xtick_template(k,:),'user','origin');
end
k = k + 1;
end
if isempty(j)
j = 0;
end
% ytick
%
if abs(wave_top) > abs(wave_bottom)
wave_long = abs(wave_top);
else
wave_long = abs(wave_bottom);
end
% choose [2 4 8] as divisor to determin ytick interval
%
y_interval(1) = rri_ceil(wave_long, 2);
y_interval(2) = rri_ceil(wave_long, 4);
y_interval(3) = rri_ceil(wave_long, 8);
if isempty(y_interval_selection) % interval not selected
y_interval2 = y_interval(1); % select 1st one
else
y_interval2 = y_interval(y_interval_selection);
end
ytick_start = ceil(wave_bottom/y_interval2) * y_interval2;
ytick_end = floor(wave_top/y_interval2) * y_interval2;
ytick_pos = [ytick_start:y_interval2:ytick_end];
ytick_template = [];
% traverse upper half of y axis and put tick on
%
k = 1;
for j = ytick_pos
ytick_template(k,:) = copyobj(ytick_template_hdl, ha);
set(ytick_template(k,:),'ydata', ...
get(ytick_template(k,:),'ydata') ...
+j/(wave_top - wave_bottom));
if j==0
set(ytick_template(k,:),'user','origin');
end
k = k + 1;
end
% create legend axis
%
offset = 0.08; % legend axis offset to left
offset2 = 0; % legend axis offset to bottom
offset3 = 0.01; % axis label offset to axis
laxis_hdl = copyobj(axis_template, ha);
for j=1:2 % just for 2 axis line
set(laxis_hdl(j), 'visible', 'on', ...
'xdata',eta*get(laxis_hdl(j),'xdata') ...
+offset, ...
'ydata',eta*(get(laxis_hdl(j),'ydata') ...
+abs(wave_bottom)/(abs(wave_bottom)+abs(wave_top))) ...
+offset2);
end
% create legend tickmark
%
if ~isempty(xtick_template)
lxtick_hdl = copyobj(xtick_template, ha);
for j=1:size(lxtick_hdl,1) % for all the components on xtick
set(lxtick_hdl(j), 'visible', 'on', ...
'xdata',eta*get(lxtick_hdl(j),'xdata') ...
+offset, ...
'ydata',eta*(get(lxtick_hdl(j),'ydata') ...
+abs(wave_bottom)/(abs(wave_bottom)+abs(wave_top))) ...
+offset2);
if strcmp(get(lxtick_hdl(j),'user'),'origin')
set(lxtick_hdl(j), 'visible', 'off');
end
% create legend tickmark label
%
% lxticklabel_x = get(lxtick_hdl(j),'xdata');
% lxticklabel_x = lxticklabel_x(1);
% lxticklabel_y = get(lxtick_hdl(j),'ydata');
% lxticklabel_y = lxticklabel_y(1);
% lxticklabel_hdl(j) = text(lxticklabel_x, lxticklabel_y, ...
% num2str(x_interval*j), ...
% 'horizon', 'center', 'vertical', 'top', ...
% 'fontsize',12,'clipping','on');
end
else
lxtick_hdl = [];
end
if ~isempty(ytick_template)
lytick_hdl = copyobj(ytick_template, ha);
for j=1:size(lytick_hdl,1) % for all the components on ytick
set(lytick_hdl(j), 'visible', 'on', ...
'xdata',eta*get(lytick_hdl(j),'xdata') ...
+offset, ...
'ydata',eta*(get(lytick_hdl(j),'ydata') ...
+abs(wave_bottom)/(abs(wave_bottom)+abs(wave_top))) ...
+offset2);
if strcmp(get(lytick_hdl(j),'user'),'origin')
set(lytick_hdl(j), 'visible', 'off');
end
% create legend tickmark label
%
% lyticklabel_x = get(lytick_hdl(j),'xdata');
% lyticklabel_x = lyticklabel_x(2);
% lyticklabel_y = get(lytick_hdl(j),'ydata');
% lyticklabel_y = lyticklabel_y(2);
% lyticklabel_hdl(j) = text(lyticklabel_x, lyticklabel_y, ...
% num2str(y_interval2*j), ...
% 'horizon', 'left', 'vertical', 'middle', ...
% 'fontsize',12,'clipping','on');
end
else
lytick_hdl = [];
end
% create legend axis label
%
%--------------------------------
% north
%
if start_timepoint < 0
ltext_x = eta * ((-start_timepoint)/(timepoint-1)) + offset;
else
ltext_x = offset;
end
ltext_y = eta + offset2 + offset3;
legend_text_hdl(1) = text(ltext_x,ltext_y, ...
deblank(north), ...
'horizon', 'center', 'vertical', 'bottom', ...
'fontsize',font_size,'clipping','on');
% south
%
if start_timepoint < 0
ltext_x = eta * ((-start_timepoint)/(timepoint-1)) + offset;
else
ltext_x = offset;
end
ltext_y = offset2 - offset3;
legend_text_hdl(2) = text(ltext_x,ltext_y, ...
deblank(south), ...
'horizon', 'center', 'vertical', 'top', ...
'fontsize',font_size,'clipping','on');
% east
%
ltext_x = eta + offset + offset3;
ltext_y = eta * abs(wave_bottom)/(abs(wave_bottom) ...
+ abs(wave_top)) + offset2;
legend_text_hdl(3) = text(ltext_x,ltext_y, ...
deblank(east), ...
'horizon', 'left', 'vertical', 'middle', ...
'fontsize',font_size,'clipping','on');
% west
%
ltext_x = offset - offset3;
ltext_y = eta * abs(wave_bottom)/(abs(wave_bottom) ...
+ abs(wave_top)) + offset2;
legend_text_hdl(4) = text(ltext_x,ltext_y, ...
deblank(west), ...
'horizon', 'right', 'vertical', 'middle', ...
'fontsize',font_size,'clipping','on');
axis_hdl = [];
xtick_hdl = [];
ytick_hdl = [];
selected_subjects = getappdata(fig,'selected_subjects');
selected_conditions = getappdata(fig,'selected_conditions');
% create new waves, and save the handles
%
for i=selected_chan_idx
% draw sub axes
%
axis_hdl(:,i) = copyobj(axis_template, ha);
for j=1:size(axis_hdl,1) % for all the components on axis
set(axis_hdl(j,i), ...
'xdata',eta*get(axis_hdl(j,i),'xdata')+x(i), ...
'ydata',eta*get(axis_hdl(j,i),'ydata')+y(i));
end
if ~isempty(xtick_template)
xtick_hdl(:,i) = copyobj(xtick_template, ha);
for j=1:size(xtick_hdl,1) % for all the components on xtick
set(xtick_hdl(j,i), ...
'xdata',eta*get(xtick_hdl(j,i),'xdata')+x(i), ...
'ydata',eta*get(xtick_hdl(j,i),'ydata')+y(i));
if strcmp(get(xtick_hdl(j,i),'user'),'origin')
set(xtick_hdl(j,i), 'visible', 'off');
end
end
end
if ~isempty(ytick_template)
ytick_hdl(:,i) = copyobj(ytick_template, ha);
for j=1:size(ytick_hdl,1) % for all the components on ytick
set(ytick_hdl(j,i), ...
'xdata',eta*get(ytick_hdl(j,i),'xdata')+x(i), ...
'ydata',eta*get(ytick_hdl(j,i),'ydata')+y(i));
if strcmp(get(ytick_hdl(j,i),'user'),'origin')
set(ytick_hdl(j,i), 'visible', 'off');
end
end
end
x_wave = eta * (0:timepoint-1)/(timepoint-1) + x(i);
if num_avg ~= 0
seq_idx = 1;
for j = selected_avg_idx
y_wave = eta * ...
avg_amplitude(:,i,j)/ ...
(abs(wave_bottom)+abs(wave_top))+y(i);
avg_wave_hdl(i,j) = plot(x_wave, y_wave, ...
color_code1(seq_idx,:), ...
'linewidth', 2, ...
'userdata',[seq_idx,i]);
seq_idx = seq_idx + 1;
end % for selected_avg_idx
else
avg_wave_hdl = [];
end
if num_wave ~= 0
seq_idx = 1;
for j = selected_wave_idx
y_wave = eta * ...
wave_amplitude(:,i,j)/ ...
(abs(wave_bottom)+abs(wave_top))+y(i);
if view_option == 1
condition_num = selected_wave_info(j,1);
subject_num = selected_wave_info(j,2);
else
condition_num = [];
subject_num = [];
end
% wave_hdl(channel, wave)
% userdata [wave_sequence, channel, condition, subject]
%
wave_hdl(i,j) = plot(x_wave, y_wave, ...
color_code2(seq_idx,:), ...
'buttondown','erp_plot_ui(''select_wave'');',...
'userdata', [seq_idx, i, condition_num, subject_num]);
seq_idx = seq_idx + 1;
end % for num_wave
else
wave_hdl = [];
end
if num_bs ~= 0
seq_idx = 1;
for j = selected_bs_idx
x_mask = bs_x_amplitude(:,i,j);
x_mask = find(x_mask)';
if ~isempty(x_mask)
bs_x_wave = x_wave(x_mask);
bs_y_wave = bs_y_amplitude(:,i,j);
bs_y_wave = eta * (bs_y_wave(x_mask) - abs(wave_bottom) ...
/ (abs(wave_bottom) + abs(wave_top))) ...
+ y(i);
bs_wave_hdl(i,j) = plot(bs_x_wave, bs_y_wave, ...
color_code3(seq_idx,:), ...
'markersize',6, ...
'userdata',[seq_idx,i]);
else
bs_wave_hdl(i,j) = 99999;
end
seq_idx = seq_idx + 1;
end % for selected_bs_idx
else
bs_wave_hdl = [];
end
% create new chan_names, and save the handles
%
if start_timepoint < 0
text_x = x + eta*((-start_timepoint)/(timepoint-1));
else
text_x = x;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -