⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 erp_showplot_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 3 页
字号:
         %
         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 + -