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绘制遥感图像各波段热力图(相关系数矩阵)(续)

MATLAB | 这些花里胡哨的热图怎么画

Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)

Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)

Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)