利用matlab绘制矩阵色块图

上传人:痛*** 文档编号:86537196 上传时间:2022-05-07 格式:DOC 页数:13 大小:167KB
返回 下载 相关 举报
利用matlab绘制矩阵色块图_第1页
第1页 / 共13页
利用matlab绘制矩阵色块图_第2页
第2页 / 共13页
利用matlab绘制矩阵色块图_第3页
第3页 / 共13页
点击查看更多>>
资源描述
wordR语言中有一个根据实值矩阵绘制色块图的程序用于绘制相关系数矩阵图,可以用丰富的颜色和形状形象的展示矩阵元素值的大小。遗憾的是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函数的源码,源码中有详细的调用格式与参数说明,感兴趣的版友可以通过设置不同参数,做出更为精彩的图形,希望大家喜欢!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;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;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;endsx = 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轴方向变量名应为字符串矩阵或字符串元胞数组,其长度与输入矩阵的列数一样); endendif isempty(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);if strncmpi(GridOpt,On,2) mesh(x,y,z,. EdgeColor,0.7,0.7,0.7,. FaceAlpha,0,. LineWidth,1); % 参考网格线endhold 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); endend% 设置X轴和Y轴刻度标签的缩进方式MyTickLabel(gca,FigStyle);% 添加颜色条if strncmpi(ColorBar,On,2) if any(strncmpi(FigStyle,Auto,Triu,4) colorbar(Location,EastOutside); else colorbar(Location,SouthOutside); endendend% -% 调整坐标轴刻度标签子函数% -function MyTickLabel(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;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);if strncmpi(tag,Tril,4) y = y + (1:nx) - 1;elseif strncmpi(tag,Triu,4) x = x + (1:ny) - 1;endtext(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);% 输入参数类型判断if nargin nparams;dounrecog = nargout(nparams+1);% Must have name/value pairsif mod(nargs,2)=0 m = message(stats:internal:parseArgs:WrongNumberArgs); throwAsCaller(MException(m.Identifier, %s, getString(m);end% Process name/value pairsfor j=1:2:nargs pname = vararginj; if ischar(pname) m = message(stats:internal:parseArgs:IllegalParamName); throwAsCaller(MException(m.Identifier, %s, getString(m); end mask = strncmpi(pname,pnames,length(pname); % look for partial match if any(mask) if dounrecog % if theyve asked to get back unrecognized names/values, add this % one to the list unrecog(end+1):(end+2) = vararginj vararginj+1; continue else % otherwise, its 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 varargoutmask = vararginj+1; setflag(mask) = true;end% Return extra stuff if requestedif dosetflag varargoutnparams+1 = setflag; if dounrecog varargoutnparams+2 = unrecog; endendend文案大全
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!