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

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

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

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

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

利用matlab绘制矩阵色块图

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

遗憾的是MATLAB中没有这样的函数,因

此我就用MATLAB编写了一个matrixplot函数,下面给出示例和源码,与大家一起分享!

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

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

显示黑色文字:

>>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];

>>XVarNames={'xiezhh','heping','keda','tust','tianjin'};

>>

matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames);

效果图1:

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

>>

【例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','FigShape','e');

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

>>

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

>>

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');

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

>>I=double(imread('kids.tif));

>>matrixplot(l,'DisplayOpt','off,'colorbar','on','grid','off);

最后贴上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,'YVar

Names',XVarNames);

%

%CopyRight:

xiezhh(谢中华),2013.01.24编写

%对第一个输入参数类型进行判断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;

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;

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;

end

sx=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轴方向变量名应为字符串矩阵或字符串元胞数组,其长度与输入矩阵的列数相同');

end

end

ifisempty(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]);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,nF0.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);

end

end

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

%ha坐标系句柄值

%tag调整坐标轴刻度标签的标识字符串,可用取值如下:

%'Auto'---将x轴刻度标签旋转90度,y轴刻度标签不作调整

%'Tril'---将x轴刻度标签旋转90度,并依次缩进,y轴刻度标签不作调整

%'Triu'---将x轴刻度标签旋转90度,y轴刻度标签依次缩进

%Example:

%MyTickLabel(gca,'Tril');

%

%CopyRight:

xiezhh(谢中华),2013.1编写

if~ishandle(ha)

warning('MATLAB:

warning2','第一个输入参数应为坐标系句柄');return;

endif~strcmpi(get(ha,'type'),'axes')

warning('MATLAB:

warning3','第一个输入参数应为坐标系句柄');

return;

endaxes(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维色块图子函数

%

functionMyPatch(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('至少需要三个输入参数');

end

if~isreal(x)||~isreal(y)||~isreal(z)error('前三个输入应为实值数组');

endn=numel(z);

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

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;

end

rab2=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);

b=(1-rab2).*a;

EllipseVertices(x,y,z,a,b);

elseifstrncmpi(FigShape,'Hexagon',1)

%六边形

ifstrncmpi(FigSize,'Full',3)

r=0.5*rab1;

else

r=0.5*sqrt(rab2);

end

HexagonVertices(x,y,z,r);

else

%表盘形

ifstrncmpi(FigSize,'Full',3)

r=0.45*rab1;

else

r=0.45*sqrt(rab2);

end

DialVertices(x,y,z,r);

end

end

%

%求色块顶点坐标并绘制色块的子函数

%

functionSquareVertices(x,y,z,r)

%方形

hx=r/2;

hy=hx;

Xp=[x-hx;x-hx;x+hx;x+hx;x-hx];

Yp=[y-hy;y+hy;y+hy;y-hy;y-hy];

Zp=repmat(z,[5,1]);patch(Xp,Yp,Zp,'FaceColor','flat','EdgeColor','flat');end

functionCircleVertices(x,y,z,r)

%圆形

t=linspace(0,2*pi,30)';

m=numel(t);

Xp=repmat(x,[m,1])+cos(t)*r;

Yp=repmat(y,[m,1])+sin(t)*r;

Zp=repmat(z,[m,1]);

patch(Xp,Yp,Zp,'FaceColor','flat','EdgeColor','flat');end

functionEllipseVertices(x,y,z,a,b)

%椭圆形

t=linspace(0,2*pi,30)';

m=numel(t);

t0=-sign(z)*pi/4;

t0=repmat(t0,[m,1]);

x0=cos(t)*a;

y0=sin(t)*b;

X

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

当前位置:首页 > 工程科技 > 交通运输

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

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