📄 q_topoplot.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 + -