MATLAB | 好看的相关系数矩阵图绘制
Posted slandarer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB | 好看的相关系数矩阵图绘制相关的知识,希望对你有一定的参考价值。
又是一个长长的工具类函数,创作编写不易,如果有用的话点赞
,转发
走起~
绘制超好看的相关系数矩阵图!工具函数由于过长将放在最后展示,以下先展示使用方式和绘制效果:
使用效果
使用教程
0 数据准备
数据就多列的数值矩阵即可:
X=[-2.8461 -0.9470 -0.1491 -1.6213 -1.1106 0.6428 2.7456 -1.0897
-0.7024 -0.1509 -1.9612 -0.9706 1.0950 0.3940 1.6108 0.6323
0.3761 -1.1815 -0.3485 -1.2662 -0.8673 -1.6869 -0.8052 1.4172
0.1717 0.0230 -0.1417 -0.0084 -1.2139 -0.6537 0.1804 0.5806
-1.5339 0.0020 -2.4430 -0.5684 0.0198 -0.2628 -0.0488 1.3821
-0.6906 0.6501 -0.2527 0.1571 0.7983 2.0210 -0.5023 -0.3868
0.7227 0.4469 1.1316 0.2165 1.9895 -0.9230 0.2779 0.1402
-1.1487 -0.1272 0.0974 0.7397 -1.1794 1.4483 0.5348 0.9840
2.4263 0.3561 -0.5850 -0.0829 0.9081 0.6718 3.1348 -1.6806
1.4553 -0.7559 1.3223 -0.1616 1.6948 -0.0941 0.2619 0.0846
1.1833 2.0956 -0.4242 -1.1503 0.4986 -0.7468 -1.1212 -1.4685
1.2845 -0.3788 -0.2780 3.2273 0.2187 -1.7527 -0.5731 0.8619
0.9713 0.3849 0.4713 1.3746 1.3742 -0.0587 0.5780 -0.0382
1.4192 0.4118 1.0904 0.6697 1.1387 -1.4548 -1.4595 -0.6207
-0.1758 -0.0541 3.3090 0.4501 1.5922 -2.0072 -0.5666 -1.0384
3.1798 1.2233 2.1071 0.3412 0.6792 -0.4604 0.3374 -0.6348
2.6781 0.9919 2.2081 2.3743 1.0871 0.2585 -0.6621 0.1306
1.6062 3.3028 2.5823 2.1885 2.4703 -1.1143 0.1006 1.9326
-0.0094 2.4318 3.1476 1.9018 2.9599 -0.2546 -1.3590 -2.0736
2.0687 1.5410 1.1177 2.2240 2.3615 -0.5323 -1.0246 -0.2873];
为了减少之后代码的篇幅,已将此矩阵存入XData.mat
文件,后文使用如下方式导入数据:
load XData.mat
1 基本使用
对,就两行!
load XData.mat
CMP=corrMatPlot(X);
CMP=CMP.draw();
2 修改标签
理论上方法有三种,以下三种方式等价(推荐第二种):
load XData.mat
CMP=corrMatPlot(X,'Labels','welcome','to','follow','my','wechat','official','account','slandarer');
CMP=CMP.draw();
load XData.mat
CMP=corrMatPlot(X);
CMP=CMP.setLabelStr('welcome','to','follow','my','wechat','official','account','slandarer');
CMP=CMP.draw();
load XData.mat
CMP=corrMatPlot(X);
CMP=CMP.draw();
CMP.setLabelStr('welcome','to','follow','my','wechat','official','account','slandarer');
3 修改colormap
上面三种修改方式依旧适用,但为了节省篇幅只介绍最推荐的一种,同时此方法接受三种格式数据,使用setColorMap
函数修改配色:
3.1 matlab自带colormap
matlab 自带的colormap
均可用:
load XData.mat
CMP=corrMatPlot(X);
CMP=CMP.setColorMap(copper);
CMP=CMP.draw();
copper:
pink:
summer:
3.2 mx3大小RGB数组
load XData.mat
CMP=corrMatPlot(X);
cList=[114,146,184;255,255,255;132,158,119]./255;
CMP=CMP.setColorMap(cList);
CMP=CMP.draw();
3.3 内置colormap
本工具函数类内内置了6种colormap,可以通过:
- obj.setColorMap(n)
的格式使用:
load XData.mat
CMP=corrMatPlot(X);
CMP=CMP.setColorMap(2);
CMP=CMP.draw();
内置配色1:
内置配色2:
内置配色3:
内置配色4:
内置配色5:
内置配色6:
4 上下三角模式
设置类的Format
属性即可:
full
完整矩阵图triu
上三角矩阵图tril
下三角矩阵图
load XData.mat
CMP=corrMatPlot(X,'Format','tril');
CMP=CMP.setColorMap(1);
CMP=CMP.draw();
5 系数展示格式
通过调整Type
属性调整格式:
sq
: 方形(默认)ssq
: 含文本方形pie
: 饼图circ
: 圆形oval
: 椭圆形
load XData.mat
CMP=corrMatPlot(X,'Type','pie');
CMP=CMP.setColorMap(1);
CMP=CMP.draw();
全部格式展示(上三角)
sq:
ssq:
pie:
circ:
oval:
6 标签格式修改
使用:
- setXLabel
- setYLabel
函数分别修饰X轴Y轴标签,text
对象具有的属性均可被修饰,以下展示修饰字体,字号及颜色:
load XData.mat
CMP=corrMatPlot(X,'Format','triu','Type','pie');
CMP=CMP.setColorMap(1);
CMP=CMP.draw();
CMP.setXLabel('Color',[.8,0,0],'FontName','Cambria','FontSize',15)
CMP.setYLabel('Color',[0,0,.8],'FontName','Cambria','FontSize',15)
7 框格式修改
使用setBox
函数修饰框样式,Line
对象具有的属性均可被修饰,以下展示加粗并更改颜色:
load XData.mat
CMP=corrMatPlot(X,'Format','triu','Type','pie');
CMP=CMP.setColorMap(1);
CMP=CMP.draw();
CMP.setBox('LineWidth',2,'Color',[.8,0,0])
7 内容物修饰
使用setPatch
修改内容物格式,Patch
对象具有的属性均可被修饰,以下展示加粗边缘,修改边缘颜色:
load XData.mat
CMP=corrMatPlot(X,'Format','triu','Type','pie');
CMP=CMP.setColorMap(1);
CMP=CMP.draw();
CMP.setPatch('LineWidth',2,'EdgeColor',[0,0,.8])
7 数值标签修饰
使用setCorrTxt
函数进行修饰,仅ssq
格式的图像可修饰:
load XData.mat
CMP=corrMatPlot(X,'Format','triu','Type','ssq');
CMP=CMP.setColorMap(1);
CMP=CMP.draw();
CMP.setCorrTxt('Color',[0,0,.8],'FontName','Cambria','FontSize',12)
工具函数完整代码
classdef corrMatPlot
% @author : slandarer
% gzh : slandarer随笔
% 使用示例:
% =========================================================================
% X=[-2.8461 -0.9470 -0.1491 -1.6213 -1.1106 0.6428 2.7456 -1.0897
% -0.7024 -0.1509 -1.9612 -0.9706 1.0950 0.3940 1.6108 0.6323
% 0.3761 -1.1815 -0.3485 -1.2662 -0.8673 -1.6869 -0.8052 1.4172
% 0.1717 0.0230 -0.1417 -0.0084 -1.2139 -0.6537 0.1804 0.5806
% -1.5339 0.0020 -2.4430 -0.5684 0.0198 -0.2628 -0.0488 1.3821
% -0.6906 0.6501 -0.2527 0.1571 0.7983 2.0210 -0.5023 -0.3868
% 0.7227 0.4469 1.1316 0.2165 1.9895 -0.9230 0.2779 0.1402
% -1.1487 -0.1272 0.0974 0.7397 -1.1794 1.4483 0.5348 0.9840
% 2.4263 0.3561 -0.5850 -0.0829 0.9081 0.6718 3.1348 -1.6806
% 1.4553 -0.7559 1.3223 -0.1616 1.6948 -0.0941 0.2619 0.0846
% 1.1833 2.0956 -0.4242 -1.1503 0.4986 -0.7468 -1.1212 -1.4685
% 1.2845 -0.3788 -0.2780 3.2273 0.2187 -1.7527 -0.5731 0.8619
% 0.9713 0.3849 0.4713 1.3746 1.3742 -0.0587 0.5780 -0.0382
% 1.4192 0.4118 1.0904 0.6697 1.1387 -1.4548 -1.4595 -0.6207
% -0.1758 -0.0541 3.3090 0.4501 1.5922 -2.0072 -0.5666 -1.0384
% 3.1798 1.2233 2.1071 0.3412 0.6792 -0.4604 0.3374 -0.6348
% 2.6781 0.9919 2.2081 2.3743 1.0871 0.2585 -0.6621 0.1306
% 1.6062 3.3028 2.5823 2.1885 2.4703 -1.1143 0.1006 1.9326
% -0.0094 2.4318 3.1476 1.9018 2.9599 -0.2546 -1.3590 -2.0736
% 2.0687 1.5410 1.1177 2.2240 2.3615 -0.5323 -1.0246 -0.2873];
%
% CMP=corrMatPlot(X,'Format','triu','Type','pie');
% CMP=CMP.setColorMap(1);
% CMP=CMP.draw();
% CMP.setLabelStr('welcome','to','follow','my','wechat','official','account','slandarer')
properties
ax;drawn=false;
arginList='Labels','colorMap','Format','Type'
Labels=;
colorMap=;
baseCM=[189, 53, 70;255,255,255; 97, 97, 97]./255,...
[113,161,195;255,255,255;228,103, 38]./255,...
[ 28,127,119;255,255,255;204,157, 80]./255,...
[130,130,255;255,255,255;255,133,133]./255,...
[209,58,78;253,203,121;254,254,189;198,230,156;63,150,181]./255,...
[243,166, 72;255,255,255;133,121,176]./255;
Format='full'% full:完整矩阵 triu:上三角 tril:下三角
Type='sq' % sq : 方形(默认)
% ssq : 含文本方形
% pie : 饼图
% circ : 圆形
% oval : 椭圆形
XData;num;corrMat;
% -----------------------------------------------------------------
boxHdl;txtHdl;
RLabelHdl;CLabelHdl;
colorbarHdl
matrixHdl
end
methods
function obj=corrMatPlot(varargin)
if isa(varargin1,'matlab.graphics.axis.Axes')
obj.ax=varargin1;varargin(1)=[];
else
obj.ax=gca;
end
% 获取版本信息
tver=version('-release');
verMatlab=str2double(tver(1:4))+(abs(tver(5))-abs('a'))/2;
if verMatlab<2017
hold on
else
hold(obj.ax,'on')
end
% -------------------------------------------------------------
obj.colorMap=obj.baseCM1;
obj.XData=varargin1;varargin(1)=[];
obj.corrMat=corr(obj.XData);
obj.num=size(obj.corrMat,1);
% 获取其他信息
for i=1:(length(varargin)-1<以上是关于MATLAB | 好看的相关系数矩阵图绘制的主要内容,如果未能解决你的问题,请参考以下文章
Python遥感图像处理应用篇(二十七):Python绘制遥感图像各波段热力图(相关系数矩阵)(续)
Python遥感图像处理应用篇(二十七):Python绘制遥感图像各波段热力图(相关系数矩阵)(续)
Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)