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

📄 q_topoplot.m

📁 用于脑电分析的各类源码
💻 M
字号:
function handle = q_topoplot(varargin)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%本函数功能为绘制脑电地形图%要求输入参数至少为两个,第1个为绘图数据序列,第2个为导联位置矩阵%导联位置矩阵要求为4列元胞矩阵,第1列为序号,第2,3列为极坐标的极角与极径,第四列为导联标志符号%极轴的取向为顶部至鼻尖,极角取值未头部左半球负值,右半球正值,极径的最大值为0.5%其他输入参数定义为:%    绘制风格参数:style, 默认值为both%    style取值:fill(块填充),contour(仅等高线),surface(平滑过渡),both(等高线兼平滑过渡)%    等高线条数参数:CONTOURNUM,默认值为6%    头皮电极绘制风格参数:electrode,默认值为'on'%    electrode取值:开,'on';关,'off';符号标识,'labels';序号标识,'number'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%检测输入参数数量,必须包含绘图数据及导联位置矩阵,且其维度必须符合if nargin < 2    error('q_topoplot(): 输入参数必须大于等于2');enddata_leads=varargin{1};loc_leads=varargin{2};[r,c] = size(data_leads);if r>1 & c>1,  error('q_topoplot(): 绘图数据必须为一维向量');endif size(loc_leads,2) < 3   error('q_topoplot(): 导联位置矩阵要求至少为三列');end if length(data_leads)~=size(loc_leads{1},1)    error('q_topoplot(): 绘图数据与导联位置矩阵格式不匹配');end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%由绘图数据进行插值,计算头部各点的脑电数据Th = pi/180*loc_leads{2};                               % 转化为弧度Rd = loc_leads{3};[x,y] = pol2cart(Th,Rd);                                  % 转化为直角座标rmax = 0.5;ha = gca;clahold onGRID_SCALE = 100;xi = linspace(-0.5,0.5,GRID_SCALE);   % x-axis description (row vector)yi = linspace(-0.5,0.5,GRID_SCALE);   % y-axis description (row vector)[Xi,Yi,Zi] = griddata(y,x,data_leads,yi',xi,'invdist'); % 进行插值  % 屏蔽脑外的区域mask = (sqrt(Xi.^2+Yi.^2) <= rmax);ii = find(mask == 0);Zi(ii) = NaN;  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 计算头部轮廓绘制所需的坐标矩阵l = 0:2*pi/100:2*pi;basex = 0.18*rmax;  tip = rmax*1.15; base = rmax-0.004;EarX = [.497 .510 .518 .5299 .5419 .54 .547 .532 .510 .489];EarY = [.0555 .0775 .0783 .0746 .0555 -.0055 -.0932 -.1313 -.1384 -.1199];   % Plot Head, Ears, NoseHCOLOR = [0 0 0];HLINEWIDTH = 2;    %定义绘制头部及耳朵和鼻子的线型、颜色及宽度plot(cos(l).*rmax,sin(l).*rmax,...    'color',HCOLOR,'Linestyle','-','LineWidth',HLINEWIDTH);     %头部plot([.18*rmax;0;-.18*rmax],[base;tip;base],...    'Color',HCOLOR,'LineWidth',HLINEWIDTH);                     %鼻子plot(EarX,EarY,'color',HCOLOR,'LineWidth',HLINEWIDTH)           %右耳plot(-EarX,EarY,'color',HCOLOR,'LineWidth',HLINEWIDTH)          %左耳%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 由插值完成的数据绘制头部脑电地形图            %%%%%%%%%%%%%%%%%      %%%%%%%%%%%%%%%%%%%%%%    % 定义绘制风格    % 绘制风格为fill(块填充),contour(仅等高线),surface(平滑过渡),both (等高线兼平滑过渡)默认值为both    STYLE = 'both';          CONTOURNUM = 10;         % 等高线数量,默认值为6条    SHADING = 'flat';       % flat or interp    delta = xi(2)-xi(1);    % 网格宽度        % 检测要求的绘制风格      for i=3:2:nargin        if strcmp(lower(varargin{i}),'style')            STYLE=varargin{i+1};        end        if strcmp(lower(varargin{i}),'contournum')            CONTOURNUM=varargin{i+1};        end    end    if strcmp(STYLE,'contour')        contour(Xi,Yi,Zi,CONTOURNUM,'k');    elseif strcmp(STYLE,'both')        surface(Xi-delta/2,Yi-delta/2,zeros(size(Zi)),Zi,'EdgeColor','none',...        'FaceColor',SHADING);        contour(Xi,Yi,Zi,CONTOURNUM,'k');    elseif strcmp(STYLE,'surface')        surface(Xi-delta/2,Yi-delta/2,zeros(size(Zi)),Zi,'EdgeColor','none',...        'FaceColor',SHADING);    elseif strcmp(STYLE,'fill')        contourf(Xi,Yi,Zi,CONTOURNUM,'k');    else        error('Invalid style')    end      set(ha,'Xlim',[-rmax*1.3 rmax*1.3],'Ylim',[-rmax*1.3 rmax*1.3]) %确定显示坐标范围,将地形图置于坐标轴正中                       %%%%%%%%%%%%%%%%%      %%%%%%%%%%%%%%%%%%%%%%    %检测图形中是否要求绘出电极    ELECTRODE='on';     %电极绘出格式为:开,关,符号标识,数字标识,默认为开    for i=3:2:nargin        if strcmp(lower(varargin{i}),'electrode')           ELECTRODE=varargin{i+1};        end    end        % Plot Electrodes    EMARKERSIZE = 6;EMARKER = '.';ECOLOR = [0 0 0];    EFSIZE = get(0,'DefaultAxesFontSize'); %电极绘制风格        if strcmp(ELECTRODE,'on')         hp2 = plot(y,x,EMARKER,'Color',ECOLOR,'markersize',EMARKERSIZE);    elseif strcmp(ELECTRODE,'labels')        if size(loc_leads,2)<4            error('导联位置矩阵中未含有导联符号标识信息')        else labels=loc_leads{4};        end        for i = 1:size(labels,1)            text(y(i),x(i),labels(i,:),'HorizontalAlignment','center',...            'VerticalAlignment','middle','Color',ECOLOR,'FontSize',EFSIZE)        end    elseif strcmp(ELECTRODE,'number')               labels=loc_leads{1};        for i = 1:size(labels,1)            text(y(i),x(i),int2str(labels(i)),'HorizontalAlignment','center',...            'VerticalAlignment','middle','Color',ECOLOR,'FontSize',EFSIZE)        end    end        hold off;axis off;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -