利用matlab绘制矩阵色块图.docx

上传人:b****8 文档编号:24035908 上传时间:2023-05-23 格式:DOCX 页数:12 大小:130.02KB
下载 相关 举报
利用matlab绘制矩阵色块图.docx_第1页
第1页 / 共12页
利用matlab绘制矩阵色块图.docx_第2页
第2页 / 共12页
利用matlab绘制矩阵色块图.docx_第3页
第3页 / 共12页
利用matlab绘制矩阵色块图.docx_第4页
第4页 / 共12页
利用matlab绘制矩阵色块图.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

利用matlab绘制矩阵色块图.docx

《利用matlab绘制矩阵色块图.docx》由会员分享,可在线阅读,更多相关《利用matlab绘制矩阵色块图.docx(12页珍藏版)》请在冰豆网上搜索。

利用matlab绘制矩阵色块图.docx

利用matlab绘制矩阵色块图

R语言中有一个根据实值矩阵绘制色块图的程序〔用于绘制相关系数矩阵图〕,可以用丰富的颜色和形状形象的展示矩阵元素值的大小。

遗憾的是MATLAB中没有这样的函数,因此我就用MATLAB编写了一个matrixplot函数,下面给出示例和源码,与大家一起分享!

**********************************************

【例1】绘制网格线,网格中显示矩阵元素。

显示黑色文字:

          -0.5,0.2,-0.3,0.7,1];>>XVarNames={'xiezhh','heping','keda','tust','tianjin'};>>matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames);

效果图1:

 

根据矩阵元素值自动设置文字颜色:

>>matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor','Auto','ColorBar','on');

效果图2:

 

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

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

>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor',[0.6,0.6,0.6],'ColorBar','on');

效果图3:

 方形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体

>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on');

效果图4:

 

椭圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体

>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on','FigShape','e');

效果图5:

 

圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体,上三角形式显示

>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on','FigShape','c','FigStyle','Triu');

效果图6:

 

六边形色块,根据矩阵元素值自动确定色块的大小和颜色,显示字体,下三角形式显示

>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','on','FigSize','Auto','ColorBar','on','FigShape','h','FigStyle','Tril');

效果图7:

 表盘形色块,根据矩阵元素值自动确定色块的颜色,不显示字体

>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Full','ColorBar','on','FigShape','d');

效果图8:

 【例3】读取真彩图片,绘制伪红外图。

>>I=double(imread('kids.tif'));>>matrixplot(I,'DisplayOpt','off','colorbar','on','grid','off');

效果图9:

 最后贴上matrixplot函数的源码,源码中有详细的调用格式与参数说明,感兴趣的版友可以通过设置不同参数,做出更为精彩的图形,希望大家喜欢!

functionmatrixplot(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;ifisnan(rangedata)   warning('MATLAB:

warning1','请检查您输入的矩阵是否适宜!

');   return;endz=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;

ifstrncmpi(FigStyle,'Tril',4)   z(triu(ones(size(z)),2)>0)=NaN;   sx(triu(ones(size(sx)),1)>0)=NaN;elseifstrncmpi(FigStyle,'Triu',4)   z(tril(ones(size(z)),-2)>0)=NaN;   sx(tril(ones(size(sx)),-1)>0)=NaN;endsx=sx(:

);sy=sy(:

);id=isnan(sx)|isnan(data);sx(id)=[];sy(id)=[];data(id)=[];

ifisempty(XVarNames)   XVarNames=strcat('X',cellstr(num2str((1:

n)')));else   if(iscell(XVarNames)&&(numel(XVarNames)~=n))||(~iscell(XVarNames)&&(size(XVarNames,1)~=n))       error('X轴方向变量名应为字符串矩阵或字符串元胞数组,其长度与输入矩阵的列数一样');   endendifisempty(YVarNames)   YVarNames=strcat('Y',cellstr(num2str((1:

m)')));else   if(iscell(YVarNames)&&(numel(YVarNames)~=m))||(~iscell(YVarNames)&&(size(YVarNames,1)~=m))       error('Y轴方向变量名应为字符串矩阵或字符串元胞数组,其长度与输入矩阵的行数一样');   endend

%绘图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]);ifstrncmpi(GridOpt,'On',2)   mesh(x,y,z,...       'EdgeColor',[0.7,0.7,0.7],...       'FaceAlpha',0,...       'LineWidth',1);  %参考网格线endholdon;axisequal;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]);axisoff

%绘制填充色块ifstrncmpi(FillStyle,'Fill',3)   MyPatch(sx',sy',data',FigShape,FigSize);end

%显示数值文本信息ifstrncmpi(DisplayOpt,'On',2)   str=num2str(data,'%4.2f');   scale=0.1*max(n/m,1)/(max(m,n)^0.55);   ifstrncmpi(TextColor,'Auto',3)       ColorMat=get(gcf,'ColorMap');       nc=size(ColorMat,1);       cid=fix(mapminmax(data',0,1)*nc)+1;       cid(cid<1)=1;       cid(cid>nc)=nc;       TextColor=ColorMat(cid,:

);       fori=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);   endend

%设置X轴和Y轴刻度标签的缩进方式MyTickLabel(gca,FigStyle);

%添加颜色条ifstrncmpi(ColorBar,'On',2)   ifany(strncmpi(FigStyle,{'Auto','Triu'},4))       colorbar('Location','EastOutside');   else       colorbar('Location','SouthOutside');   endendend

%---------------------------------------------------% 调整坐标轴刻度标签子函数%---------------------------------------------------functionMyTickLabel(ha,tag)

%  根据显示X围自动调整坐标轴刻度标签的函数%  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);

ifstrncmpi(tag,'Tril',4)   y=y+(1:

nx)-1;elseifstrncmpi(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是字符串变量,用来指定色块大小。

%%  CopyRight:

xiezhh〔谢中华〕,2013.01编写%%  Example:

%        x=rand(10,1);%        y=rand(10,1);%        z=rand(10,1);%        MyPatch(x,y,z,'s','Auto');%

%输入参数类型判断ifnargin<3   error('至少需要三个输入参数');endif~isreal(x)||~isreal(y)||~isreal(z)   error('前三个输入应为实值数组');end

n=numel(z);ifnumel(x)~=n||numel(y)~=n   error('坐标应等长');end

ifstrncmpi(FigSize,'Auto',3)&&~strncmpi(FigShape,'Ellipse',1)   id=(z==0);   x(id)=[];   y(id)=[];   z(id)=[];endifisempty(z)   return;end

%求色块顶点坐标rab1=ones(size(z));maxz=max(abs(z));ifmaxz==0   maxz=1;endrab2=abs(z)/maxz;ifstrncmpi(FigShape,'Square',1)   %方形   ifstrncmpi(FigSize,'Full',3)       r=rab1;   else       r=sqrt(rab2);   end   SquareVertices(x,y,z,r);elseifstrncmpi(FigShape,'Circle',1)   %圆形   ifstrncmpi(FigSize,'Full',3)       r=0.5*rab1;   else       r=0.5*sqrt(rab2);   end   CircleVertices(x,y,z,r);elseifstrncmpi(FigShape,'Ellipse',1)   %椭圆形   a=0.48+rab2*(0.57-0.48)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1