matlab绘制矩阵色块图

您所在的位置:网站首页 matlab画格网 matlab绘制矩阵色块图

matlab绘制矩阵色块图

2023-08-15 21:22| 来源: 网络整理| 查看: 265

本文转载于https://blog.csdn.net/zzx2016zzx/article/details/80635840

文章目录 1、绘制网格线,网格中显示矩阵元素,显示黑色文字。2、根据矩阵元素值自动设置文字颜色3 绘制绘制实值矩阵各元素对应的色块,通过不同的“参数/参数值”控制色块的形状、大小、颜色等属性。4、方形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体。5、椭圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体。6、圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体,上三角形式显示7、六边形色块,根据矩阵元素值自动确定色块的大小和颜色,显示字体,下三角形式显示8、表盘形色块,根据矩阵元素值自动确定色块的颜色,不显示字体9 matrixplot函数的源码 在R语言中有根据矩阵绘制色块图的程序,可以用于绘制相关系数矩阵图,用丰富的颜色和形状形象的展示矩阵元素值的大小。今天介绍的是如何用matlab绘制矩阵色块图。

1、绘制网格线,网格中显示矩阵元素,显示黑色文字。 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames);

效果图如下:

在这里插入图片描述

2、根据矩阵元素值自动设置文字颜色 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor','Auto','ColorBar','on');

效果图如下: 在这里插入图片描述

3 绘制绘制实值矩阵各元素对应的色块,通过不同的“参数/参数值”控制色块的形状、大小、颜色等属性。

方形色块,充满方格,灰白色字体。

x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor',[0.6,0.6,0.6],'ColorBar','on');

效果图如下: 在这里插入图片描述

4、方形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体。 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on');

效果图如下: 在这里插入图片描述

5、椭圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体。 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on','FigShape','e');

效果图如下: 在这里插入图片描述

6、圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体,上三角形式显示 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on','FigShape','c','FigStyle','Triu');

效果图如下: 在这里插入图片描述

7、六边形色块,根据矩阵元素值自动确定色块的大小和颜色,显示字体,下三角形式显示 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','on','FigSize','Auto','ColorBar','on','FigShape','h','FigStyle','Tril');

在这里插入图片描述

8、表盘形色块,根据矩阵元素值自动确定色块的颜色,不显示字体 x = [1.0000 0.1302 0.0582 0.0169 0.0779 0.0833 -0.0313 0.1302 1.0000 0.0482 0.3843 0.2105 -0.2500 0.0803 0.0582 0.0482 1.0000 0.0481 0.3515 -0.0426 0.0574 0.0169 0.3843 0.0481 1.0000 -0.1819 -0.3554 -0.0020 0.0779 0.2105 0.3515 -0.1819 1.0000 0.0388 0.0186 0.0833 -0.2500 -0.0426 -0.3554 0.0388 1.0000 -0.1853 -0.0313 0.0803 0.0574 -0.0020 0.0186 -0.1853 1.0000]; XVarNames = {'Sleep','Age','Sex','Rel','Psy','Ner','Cha'}; matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Full','ColorBar','on','FigShape','d');

在这里插入图片描述

9 matrixplot函数的源码

最后贴上matrixplot函数的源码,源码中有详细的调用格式及参数说明,可以通过设置不同参数。感兴趣的朋友可以自己设置不同的参数。

function matrixplot(data,varargin) % 根据实值矩阵绘制色块图,用丰富的颜色和形状形象的展示矩阵元素值的大小。 % % matrixplot(data) 绘制矩阵色块图,data为实值矩阵,每一个元素对应一个色块,色 % 块颜色由元素值大小决定。 % % matrixplot(data, 'PARAM1',val1, 'PARAM2',val2, ...) % 用成对出现的参数名/参数值控制色块的各项属性。可用的参数名/参数值如下: % 'FigShape' --- 设定色块的形状,其参数值为: % 'Square' --- 方形(默认) % 'Circle' --- 圆形 % 'Ellipse' --- 椭圆形 % 'Hexagon' --- 六边形 % 'Dial' --- 表盘形 % % 'FigSize' --- 设定色块的大小,其参数值为: % 'Full' --- 最大色块(默认) % 'Auto' --- 根据矩阵元素值自动确定色块大小 % % 'FigStyle' --- 设定矩阵图样式,其参数值为: % 'Auto' --- 矩形矩阵图(默认) % 'Tril' --- 下三角矩阵图 % 'Triu' --- 上三角矩阵图 % % 'FillStyle' --- 设定色块填充样式,其参数值为: % 'Fill' --- 填充色块内部(默认) % 'NoFill' --- 不填充色块内部 % % 'DisplayOpt' --- 设定是否在色块中显示矩阵元素值,其参数值为: % 'On' --- 显示矩阵元素值(默认) % 'Off' --- 不显示矩阵元素值 % % 'TextColor' --- 设定文字的颜色,其参数值为: % 表示单色的字符('r','g','b','y','m','c','w','k'),默认为黑色 % 1行3列的红、绿、蓝三元色灰度值向量([r,g,b]) % 'Auto' --- 根据矩阵元素值自动确定文字颜色 % % 'XVarNames' --- 设定X轴方向需要显示的变量名(默认为X1,X2,...),其参数值为: % 字符串矩阵或字符串元胞数组,若为字符串矩阵,其行数应与data的列数相同 % 若为字符串元胞数组,其长度应与data的列数相同。 % % 'YVarNames' --- 设定Y轴方向需要显示的变量名(默认为Y1,Y2,...),其参数值为: % 字符串矩阵或字符串元胞数组,若为字符串矩阵,其行数应与data的行数相同 % 若为字符串元胞数组,其长度应与data的行数相同。 % % 'ColorBar' --- 设定是否显示颜色条,其参数值为: % 'On' --- 显示颜色条 % 'Off' --- 不显示颜色条(默认) % % 'Grid' --- 设定是否显示网格线,其参数值为: % 'On' --- 显示网格线(默认) % 'Off' --- 不显示网格线 % % Example: % x = [1,-0.2,0.3,0.8,-0.5 % -0.2,1,0.6,-0.7,0.2 % 0.3,0.6,1,0.5,-0.3 % 0.8,-0.7,0.5,1,0.7 % -0.5,0.2,-0.3,0.7,1]; % matrixplot(x); % matrixplot(x,'DisplayOpt','off'); % matrixplot(x,'FillStyle','nofill','TextColor','Auto'); % matrixplot(x,'TextColor',[0.7,0.7,0.7],'FigShap','s','FigSize','Auto','ColorBar','on'); % matrixplot(x,'TextColor','k','FigShap','d','FigSize','Full','ColorBar','on','FigStyle','Triu'); % XVarNames = {'xiezhh','heping','keda','tust','tianjin'}; % matrixplot(x,'FigShap','e','FigSize','Auto','ColorBar','on','XVarNames',XVarNames,'YVarNames',XVarNames); % 对第一个输入参数类型进行判断 if ~ismatrix(data) || ~isreal(data) error('输入参数类型不匹配:第一个输入参数应为实值矩阵'); end % 解析成对出现的参数名/参数值 [FigShape,FigSize,FigStyle,FillStyle,DisplayOpt,TextColor,XVarNames,... YVarNames,ColorBar,GridOpt] = parseInputs(varargin{:}); % 产生网格数据 [m,n] = size(data); [x,y] = meshgrid(0:n,0:m); data = data(:); maxdata = nanmax(data); mindata = nanmin(data); rangedata = maxdata - mindata; if isnan(rangedata) warning('MATLAB:warning1','请检查您输入的矩阵是否合适!'); return; end z = zeros(size(x))+0.2; sx = x(1:end-1,1:end-1)+0.5; sy = y(1:end-1,1:end-1)+0.5; if strncmpi(FigStyle,'Tril',4) z(triu(ones(size(z)),2)>0) = NaN; sx(triu(ones(size(sx)),1)>0) = NaN; elseif strncmpi(FigStyle,'Triu',4) z(tril(ones(size(z)),-2)>0) = NaN; sx(tril(ones(size(sx)),-1)>0) = NaN; end sx = sx(:); sy = sy(:); id = isnan(sx) | isnan(data); sx(id) = []; sy(id) = []; data(id) = []; if isempty(XVarNames) XVarNames = strcat('X',cellstr(num2str((1:n)'))); else if (iscell(XVarNames) && (numel(XVarNames) ~= n)) || (~iscell(XVarNames) && (size(XVarNames,1) ~= n)) error('X轴方向变量名应为字符串矩阵或字符串元胞数组,其长度与输入矩阵的列数相同'); end end if isempty(YVarNames) YVarNames = strcat('Y',cellstr(num2str((1:m)'))); else if (iscell(YVarNames) && (numel(YVarNames) ~= m)) || (~iscell(YVarNames) && (size(YVarNames,1) ~= m)) error('Y轴方向变量名应为字符串矩阵或字符串元胞数组,其长度与输入矩阵的行数相同'); end end % 绘图 figure('color','w',... 'units','normalized',... 'pos',[0.289165,0.154948,0.409956,0.68099]); axes('units','normalized','pos',[0.1,0.022,0.89,0.85]); if strncmpi(GridOpt,'On',2) mesh(x,y,z,... 'EdgeColor',[0.7,0.7,0.7],... 'FaceAlpha',0,... 'LineWidth',1); % 参考网格线 end hold on; axis equal; axis([-0.1,n+0.1,-0.1,m+0.1,-0.5,0.5]); view(2); % 设置X轴和Y轴刻度位置及标签 set(gca,'Xtick',(1:n)-0.5,... 'XtickLabel',XVarNames,... 'Ytick',(1:m)-0.5,... 'YtickLabel',YVarNames,... 'XAxisLocation','top',... 'YDir','reverse',... 'Xcolor',[0.7,0.7,0.7],... 'Ycolor',[0.7,0.7,0.7],... 'TickLength',[0,0]); axis off % 绘制填充色块 if strncmpi(FillStyle,'Fill',3) MyPatch(sx',sy',data',FigShape,FigSize); end % 显示数值文本信息 if strncmpi(DisplayOpt,'On',2) str = num2str(data,'%4.2f'); scale = 0.1*max(n/m,1)/(max(m,n)^0.55); if strncmpi(TextColor,'Auto',3) ColorMat = get(gcf,'ColorMap'); nc = size(ColorMat,1); cid = fix(mapminmax(data',0,1)*nc)+1; cid(cidnc) = nc; TextColor = ColorMat(cid,:); for i = 1:numel(data) text(sx(i),sy(i),0.1,str(i,:),... 'FontUnits','normalized',... 'FontSize',scale,... 'fontweight','bold',... 'HorizontalAlignment','center',... 'Color',TextColor(i,:)); end else text(sx,sy,0.1*ones(size(sx)),str,... 'FontUnits','normalized',... 'FontSize',scale,... 'fontweight','bold',... 'HorizontalAlignment','center',... 'Color',TextColor); end end % 设置X轴和Y轴刻度标签的缩进方式 MyTickLabel(gca,FigStyle); % 添加颜色条 if strncmpi(ColorBar,'On',2) if any(strncmpi(FigStyle,{'Auto','Triu'},4)) colorbar('Location','EastOutside'); else colorbar('Location','SouthOutside'); end end end % --------------------------------------------------- % 调整坐标轴刻度标签子函数 % --------------------------------------------------- function MyTickLabel(ha,tag) % 根据显示范围自动调整坐标轴刻度标签的函数 % ha 坐标系句柄值 % tag 调整坐标轴刻度标签的标识字符串,可用取值如下: % 'Auto' --- 将x轴刻度标签旋转90度,y轴刻度标签不作调整 % 'Tril' --- 将x轴刻度标签旋转90度,并依次缩进,y轴刻度标签不作调整 % 'Triu' --- 将x轴刻度标签旋转90度,y轴刻度标签依次缩进 % Example: % MyTickLabel(gca,'Tril'); if ~ishandle(ha) warning('MATLAB:warning2','第一个输入参数应为坐标系句柄'); return; end if ~strcmpi(get(ha,'type'),'axes') warning('MATLAB:warning3','第一个输入参数应为坐标系句柄'); return; end axes(ha); xstr = get(ha,'XTickLabel'); xtick = get(ha,'XTick'); xl = xlim(ha); ystr = get(ha,'YTickLabel'); ytick = get(ha,'YTick'); yl = ylim(ha); set(ha,'XTickLabel',[],'YTickLabel',[]); x = zeros(size(ytick)) + xl(1) - range(xl)/30; y = zeros(size(xtick)) + yl(1) - range(yl)/70; nx = numel(xtick); ny = numel(ytick); if strncmpi(tag,'Tril',4) y = y + (1:nx) - 1; elseif strncmpi(tag,'Triu',4) x = x + (1:ny) - 1; end text(xtick,y,xstr,... 'rotation',90,... 'Interpreter','none',... 'color','r',... 'HorizontalAlignment','left'); text(x,ytick,ystr,... 'Interpreter','none',... 'color','r',... 'HorizontalAlignment','right'); end % --------------------------------------------------- % 根据散点数据绘制3维色块图子函数 % --------------------------------------------------- function MyPatch(x,y,z,FigShape,FigSize) % 根据散点数据绘制3维色块图 % MyPatch(x,y,z,FigShape,FigSize) x,y,z是实值数组,用来指定色块中心点三维 % 坐标。FigShape是字符串变量,用来指定色块形状。 % FigSize是字符串变量,用来指定色块大小。 % % Example: % x = rand(10,1); % y = rand(10,1); % z = rand(10,1); % MyPatch(x,y,z,'s','Auto'); % % 输入参数类型判断 if nargin j} varargin{j+1}}; continue else % otherwise, it's an error m = message('stats:internal:parseArgs:BadParamName',pname); throwAsCaller(MException(m.Identifier, '%s', getString(m))); end elseif sum(mask)>1 mask = strcmpi(pname,pnames); % use exact match to resolve ambiguity if sum(mask)~=1 m = message('stats:internal:parseArgs:AmbiguousParamName',pname); throwAsCaller(MException(m.Identifier, '%s', getString(m))); end end varargout{mask} = varargin{j+1}; setflag(mask) = true; end % Return extra stuff if requested if dosetflag varargout{nparams+1} = setflag; if dounrecog varargout{nparams+2} = unrecog; end end end


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3