MATLA绘制三角方块热力图(完整代码与函数)

概要

本文基于 MATLAB 实际项目经验,详细讲解如何使用自定义 colormap 绘制相关性矩阵图(Correlation Matrix)。
相比于 MATLAB 默认的颜色映射方案,通过手动定义颜色梯度,可以更直观地表达变量之间的相关关系。
特别适用于数据分析、机器学习特征相关性分析、汽车性能数据分析等场景。

整体架构流程

  • 数据加载
    使用 load 函数读取保存的 .mat 文件数据。

  • 标签定义
    使用 xlb 和 ylb 定义图形坐标轴标签,保证信息完整性和易读性。

  • 自定义色图 colormap
    手动定义 RGB 三元数组,通过 colormap(map) 应用。

  • 相关性矩阵计算与绘制
    使用 MATLAB 自带 corr 函数求取相关性矩阵,结合 imagesc 函数绘制。

  • 图形美化
    设置颜色条(colorbar)、坐标轴标签、标题等细节。

技术名词解释

  • imagesc
    MATLAB 中用于绘制彩色矩阵图的函数,比 imshow 更适合科学数据展示。

  • colormap
    控制图像中颜色值映射的表格,可自定义 RGB 色值。

  • 相关性矩阵 (Correlation Matrix)
    显示多变量间两两相关系数的表格,值范围 [-1, 1],反映变量间的线性关系。

技术细节

  • RGB 数值范围为 [0, 1],不支持超过范围的值。

  • 需要提前准备 data.mat 文件,否则无法运行。

  • 若数据维度不同,请同步调整标签数组长度。

完整代码

clear;clc
%% 数据准备
% 读取数据
load data.mat
% [1.000000000000000	0.670000000000000	0.760000000000000	0.060000000000000	0.050000000000000	0.380000000000000	0.110000000000000	0.450000000000000	0.540000000000000	0.480000000000000
% 0.810000000000000	1.000000000000000	0.230000000000000	0.550000000000000	0.780000000000000	0.630000000000000	0.530000000000000	0.820000000000000	0.430000000000000	0.440000000000000
% 0.530000000000000	0.570000000000000	1.000000000000000	0.700000000000000	0.120000000000000	0.960000000000000	0.370000000000000	0.670000000000000	0.550000000000000	0.290000000000000
% 1.000000000000000	0.260000000000000	0.600000000000000	1.000000000000000	0.720000000000000	0.570000000000000	0.940000000000000	0.010000000000000	0.430000000000000	0.360000000000000
% 0.910000000000000	0.790000000000000	0.410000000000000	0.410000000000000	1.000000000000000	0.400000000000000	0.610000000000000	0.400000000000000	0.410000000000000	0.520000000000000
% 0.560000000000000	0.770000000000000	0.670000000000000	0.810000000000000	0.130000000000000	1.000000000000000	0.780000000000000	0.550000000000000	0.690000000000000	0.130000000000000
% 0.150000000000000	0.450000000000000	0.800000000000000	0.220000000000000	0.800000000000000	0.710000000000000	1.000000000000000	0.750000000000000	0.650000000000000	0.600000000000000
% 0.520000000000000	0.470000000000000	0.200000000000000	0.510000000000000	0.880000000000000	0.290000000000000	0.070000000000000	1.000000000000000	0.390000000000000	0.270000000000000
% 0.110000000000000	0.020000000000000	0.040000000000000	0.090000000000000	0.160000000000000	0.270000000000000	0.430000000000000	0.970000000000000	1.000000000000000	0.810000000000000
% 0.730000000000000	0.600000000000000	0.850000000000000
% 0.010000000000000	0.060000000000000	0.940000000000000
% 0.440000000000000	0.390000000000000	0.110000000000000
% 1.000000000000000]%s数据
% 数据矩阵
Z = data;
% 标签
xlb = {'Carb','Wt','Hp','Cyl','Disp','Qsec','Vs','Mpg','Drat','Gear'};
ylb = {'Carb','Wt','Hp','Cyl','Disp','Qsec','Vs','Mpg','Drat','Gear'};

%% 颜色定义
map = [0.619607843137255	0.003921568627451	0.258823529411765
0.627450980392157	0.011764705882353	0.258823529411765
0.631372549019608	0.015686274509804	0.262745098039216
0.639215686274510	0.027450980392157	0.262745098039216
0.647058823529412	0.035294117647059	0.262745098039216
0.654901960784314	0.043137254901961	0.266666666666667
0.662745098039216	0.050980392156863	0.266666666666667
0.678431372549020	0.066666666666667	0.270588235294118
0.686274509803922	0.074509803921569	0.274509803921569
0.690196078431373	0.082352941176471	0.274509803921569
0.698039215686274	0.090196078431373	0.278431372549020
0.705882352941177	0.098039215686275	0.278431372549020
0.709803921568627	0.105882352941176	0.278431372549020
0.717647058823529	0.113725490196078	0.282352941176471
0.733333333333333	0.129411764705882	0.286274509803922
0.737254901960784	0.133333333333333	0.286274509803922
0.745098039215686	0.145098039215686	0.290196078431373
0.756862745098039	0.156862745098039	0.290196078431373
0.764705882352941	0.164705882352941	0.290196078431373
0.768627450980392	0.172549019607843	0.294117647058824
0.776470588235294	0.180392156862745	0.294117647058824
0.788235294117647	0.188235294117647	0.298039215686275
0.792156862745098	0.196078431372549	0.298039215686275
0.803921568627451	0.211764705882353	0.301960784313725
0.811764705882353	0.219607843137255	0.301960784313725
0.819607843137255	0.227450980392157	0.305882352941176
0.827450980392157	0.235294117647059	0.305882352941176
0.835294117647059	0.243137254901961	0.305882352941176
0.839215686274510	0.250980392156863	0.305882352941176
0.843137254901961	0.254901960784314	0.301960784313725
0.850980392156863	0.266666666666667	0.301960784313725
0.850980392156863	0.270588235294118	0.301960784313725
0.854901960784314	0.278431372549020	0.298039215686275
0.862745098039216	0.286274509803922	0.294117647058824
0.870588235294118	0.294117647058824	0.294117647058824
0.874509803921569	0.301960784313725	0.294117647058824
0.878431372549020	0.305882352941176	0.290196078431373
0.878431372549020	0.313725490196078	0.290196078431373
0.882352941176471	0.321568627450980	0.290196078431373
0.890196078431372	0.329411764705882	0.286274509803922
0.898039215686275	0.337254901960784	0.282352941176471
0.898039215686275	0.341176470588235	0.282352941176471
0.901960784313726	0.349019607843137	0.278431372549020
0.909803921568627	0.356862745098039	0.278431372549020
0.913725490196078	0.364705882352941	0.278431372549020
0.917647058823529	0.372549019607843	0.274509803921569
0.921568627450980	0.376470588235294	0.274509803921569
0.925490196078431	0.380392156862745	0.270588235294118
0.929411764705882	0.388235294117647	0.270588235294118
0.937254901960784	0.400000000000000	0.266666666666667
0.945098039215686	0.407843137254902	0.262745098039216
0.945098039215686	0.415686274509804	0.262745098039216
0.952941176470588	0.423529411764706	0.262745098039216
0.956862745098039	0.427450980392157	0.262745098039216
0.956862745098039	0.435294117647059	0.266666666666667
0.956862745098039	0.443137254901961	0.270588235294118
0.960784313725490	0.454901960784314	0.274509803921569
0.960784313725490	0.462745098039216	0.278431372549020
0.960784313725490	0.474509803921569	0.282352941176471
0.964705882352941	0.486274509803922	0.290196078431373
0.964705882352941	0.494117647058824	0.294117647058824
0.964705882352941	0.505882352941176	0.298039215686275
0.968627450980392	0.513725490196078	0.301960784313725
0.968627450980392	0.521568627450980	0.305882352941176
0.968627450980392	0.529411764705882	0.305882352941176
0.968627450980392	0.545098039215686	0.313725490196078
0.972549019607843	0.556862745098039	0.321568627450980
0.972549019607843	0.560784313725490	0.321568627450980
0.976470588235294	0.572549019607843	0.329411764705882
0.976470588235294	0.580392156862745	0.333333333333333
0.980392156862745	0.592156862745098	0.337254901960784
0.980392156862745	0.600000000000000	0.341176470588235
0.980392156862745	0.607843137254902	0.345098039215686
0.980392156862745	0.615686274509804	0.349019607843137
0.984313725490196	0.623529411764706	0.352941176470588
0.984313725490196	0.643137254901961	0.360784313725490
0.988235294117647	0.650980392156863	0.364705882352941
0.988235294117647	0.662745098039216	0.372549019607843
0.988235294117647	0.670588235294118	0.372549019607843
0.988235294117647	0.674509803921569	0.376470588235294
0.992156862745098	0.682352941176471	0.380392156862745
0.992156862745098	0.690196078431373	0.388235294117647
0.992156862745098	0.698039215686274	0.396078431372549
0.992156862745098	0.705882352941177	0.400000000000000
0.992156862745098	0.713725490196078	0.407843137254902
0.992156862745098	0.725490196078431	0.415686274509804
0.992156862745098	0.729411764705882	0.419607843137255
0.992156862745098	0.737254901960784	0.427450980392157
0.992156862745098	0.745098039215686	0.431372549019608
0.992156862745098	0.749019607843137	0.435294117647059
0.992156862745098	0.756862745098039	0.443137254901961
0.992156862745098	0.768627450980392	0.450980392156863
0.992156862745098	0.776470588235294	0.458823529411765
0.992156862745098	0.780392156862745	0.462745098039216
0.992156862745098	0.792156862745098	0.470588235294118
0.992156862745098	0.800000000000000	0.478431372549020
0.992156862745098	0.803921568627451	0.482352941176471
0.992156862745098	0.811764705882353	0.490196078431373
0.992156862745098	0.819607843137255	0.494117647058824
0.992156862745098	0.823529411764706	0.498039215686275
0.992156862745098	0.831372549019608	0.505882352941176
0.992156862745098	0.847058823529412	0.517647058823529
0.992156862745098	0.854901960784314	0.525490196078431
0.992156862745098	0.858823529411765	0.529411764705882
0.992156862745098	0.866666666666667	0.533333333333333
0.992156862745098	0.874509803921569	0.541176470588235
0.996078431372549	0.878431372549020	0.545098039215686
0.996078431372549	0.882352941176471	0.552941176470588
0.996078431372549	0.890196078431372	0.564705882352941
0.996078431372549	0.890196078431372	0.568627450980392
0.996078431372549	0.898039215686275	0.576470588235294
0.996078431372549	0.901960784313726	0.588235294117647
0.996078431372549	0.905882352941176	0.596078431372549
0.996078431372549	0.909803921568627	0.600000000000000
0.996078431372549	0.913725490196078	0.611764705882353
0.996078431372549	0.917647058823529	0.615686274509804
0.996078431372549	0.921568627450980	0.619607843137255
0.996078431372549	0.929411764705882	0.631372549019608
0.996078431372549	0.933333333333333	0.639215686274510
0.996078431372549	0.941176470588235	0.647058823529412
0.996078431372549	0.945098039215686	0.654901960784314
0.996078431372549	0.949019607843137	0.662745098039216
0.996078431372549	0.952941176470588	0.670588235294118
0.996078431372549	0.956862745098039	0.674509803921569
0.996078431372549	0.960784313725490	0.686274509803922
0.996078431372549	0.964705882352941	0.690196078431373
0.996078431372549	0.968627450980392	0.698039215686274
0.996078431372549	0.976470588235294	0.709803921568627
0.996078431372549	0.980392156862745	0.717647058823529
0.996078431372549	0.984313725490196	0.725490196078431
0.996078431372549	0.988235294117647	0.729411764705882
0.996078431372549	0.992156862745098	0.737254901960784
0.996078431372549	0.996078431372549	0.741176470588235
0.996078431372549	0.996078431372549	0.741176470588235
0.988235294117647	0.996078431372549	0.733333333333333
0.988235294117647	0.996078431372549	0.733333333333333
0.984313725490196	0.992156862745098	0.725490196078431
0.976470588235294	0.988235294117647	0.717647058823529
0.976470588235294	0.988235294117647	0.713725490196078
0.972549019607843	0.988235294117647	0.705882352941177
0.968627450980392	0.988235294117647	0.701960784313725
0.964705882352941	0.984313725490196	0.698039215686274
0.960784313725490	0.984313725490196	0.690196078431373
0.956862745098039	0.980392156862745	0.682352941176471
0.949019607843137	0.980392156862745	0.674509803921569
0.949019607843137	0.980392156862745	0.670588235294118
0.945098039215686	0.976470588235294	0.666666666666667
0.941176470588235	0.976470588235294	0.658823529411765
0.937254901960784	0.972549019607843	0.654901960784314
0.929411764705882	0.972549019607843	0.647058823529412
0.929411764705882	0.972549019607843	0.639215686274510
0.929411764705882	0.972549019607843	0.639215686274510
0.921568627450980	0.968627450980392	0.631372549019608
0.917647058823529	0.964705882352941	0.623529411764706
0.913725490196078	0.964705882352941	0.619607843137255
0.909803921568627	0.964705882352941	0.611764705882353
0.905882352941176	0.960784313725490	0.607843137254902
0.901960784313726	0.960784313725490	0.603921568627451
0.901960784313726	0.960784313725490	0.600000000000000
0.894117647058824	0.956862745098039	0.596078431372549
0.882352941176471	0.952941176470588	0.596078431372549
0.878431372549020	0.952941176470588	0.596078431372549
0.866666666666667	0.945098039215686	0.600000000000000
0.858823529411765	0.941176470588235	0.603921568627451
0.850980392156863	0.937254901960784	0.603921568627451
0.839215686274510	0.933333333333333	0.603921568627451
0.831372549019608	0.929411764705882	0.607843137254902
0.827450980392157	0.929411764705882	0.607843137254902
0.819607843137255	0.925490196078431	0.611764705882353
0.803921568627451	0.917647058823529	0.615686274509804
0.796078431372549	0.913725490196078	0.615686274509804
0.784313725490196	0.909803921568627	0.619607843137255
0.776470588235294	0.909803921568627	0.619607843137255
0.772549019607843	0.905882352941176	0.619607843137255
0.764705882352941	0.901960784313726	0.623529411764706
0.745098039215686	0.898039215686275	0.627450980392157
0.741176470588235	0.898039215686275	0.627450980392157
0.737254901960784	0.894117647058824	0.627450980392157
0.729411764705882	0.890196078431372	0.627450980392157
0.713725490196078	0.886274509803922	0.631372549019608
0.709803921568627	0.882352941176471	0.631372549019608
0.701960784313725	0.878431372549020	0.635294117647059
0.690196078431373	0.874509803921569	0.635294117647059
0.686274509803922	0.870588235294118	0.639215686274510
0.678431372549020	0.866666666666667	0.639215686274510
0.662745098039216	0.862745098039216	0.639215686274510
0.650980392156863	0.858823529411765	0.643137254901961
0.643137254901961	0.858823529411765	0.643137254901961
0.631372549019608	0.850980392156863	0.643137254901961
0.619607843137255	0.847058823529412	0.643137254901961
0.615686274509804	0.843137254901961	0.643137254901961
0.600000000000000	0.839215686274510	0.643137254901961
0.592156862745098	0.835294117647059	0.643137254901961
0.588235294117647	0.835294117647059	0.643137254901961
0.576470588235294	0.831372549019608	0.643137254901961
0.556862745098039	0.819607843137255	0.643137254901961
0.549019607843137	0.815686274509804	0.643137254901961
0.541176470588235	0.811764705882353	0.643137254901961
0.533333333333333	0.811764705882353	0.643137254901961
0.521568627450980	0.807843137254902	0.643137254901961
0.509803921568627	0.803921568627451	0.643137254901961
0.494117647058824	0.796078431372549	0.643137254901961
0.486274509803922	0.792156862745098	0.643137254901961
0.482352941176471	0.792156862745098	0.643137254901961
0.470588235294118	0.788235294117647	0.643137254901961
0.458823529411765	0.784313725490196	0.643137254901961
0.447058823529412	0.780392156862745	0.643137254901961
0.439215686274510	0.776470588235294	0.643137254901961
0.427450980392157	0.772549019607843	0.643137254901961
0.419607843137255	0.768627450980392	0.643137254901961
0.403921568627451	0.764705882352941	0.647058823529412
0.392156862745098	0.752941176470588	0.647058823529412
0.388235294117647	0.749019607843137	0.647058823529412
0.380392156862745	0.741176470588235	0.650980392156863
0.372549019607843	0.733333333333333	0.654901960784314
0.364705882352941	0.721568627450980	0.658823529411765
0.356862745098039	0.713725490196078	0.662745098039216
0.349019607843137	0.705882352941177	0.666666666666667
0.341176470588235	0.698039215686274	0.670588235294118
0.337254901960784	0.690196078431373	0.670588235294118
0.329411764705882	0.682352941176471	0.674509803921569
0.317647058823529	0.670588235294118	0.682352941176471
0.309803921568627	0.658823529411765	0.686274509803922
0.301960784313725	0.650980392156863	0.690196078431373
0.298039215686275	0.647058823529412	0.694117647058824
0.290196078431373	0.639215686274510	0.694117647058824
0.282352941176471	0.627450980392157	0.701960784313725
0.270588235294118	0.615686274509804	0.705882352941177
0.266666666666667	0.611764705882353	0.709803921568627
0.262745098039216	0.607843137254902	0.709803921568627
0.250980392156863	0.592156862745098	0.713725490196078
0.243137254901961	0.584313725490196	0.717647058823529
0.235294117647059	0.576470588235294	0.717647058823529
0.227450980392157	0.568627450980392	0.721568627450980
0.219607843137255	0.556862745098039	0.725490196078431
0.215686274509804	0.552941176470588	0.729411764705882
0.203921568627451	0.541176470588235	0.737254901960784
0.196078431372549	0.529411764705882	0.737254901960784
0.200000000000000	0.521568627450980	0.733333333333333
0.203921568627451	0.517647058823529	0.733333333333333
0.211764705882353	0.509803921568627	0.729411764705882
0.219607843137255	0.501960784313725	0.725490196078431
0.223529411764706	0.490196078431373	0.721568627450980
0.235294117647059	0.478431372549020	0.713725490196078
0.239215686274510	0.470588235294118	0.713725490196078
0.239215686274510	0.470588235294118	0.713725490196078
0.247058823529412	0.458823529411765	0.705882352941177
0.258823529411765	0.447058823529412	0.698039215686274
0.266666666666667	0.439215686274510	0.694117647058824
0.270588235294118	0.431372549019608	0.690196078431373
0.274509803921569	0.427450980392157	0.686274509803922
0.282352941176471	0.415686274509804	0.682352941176471
0.290196078431373	0.403921568627451	0.678431372549020
0.301960784313725	0.392156862745098	0.674509803921569
0.305882352941176	0.388235294117647	0.670588235294118
0.305882352941176	0.384313725490196	0.670588235294118];


%% 图片尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 15;
figureHeight = 15;

%% 窗口设置
figureHandle = figure;
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);

%% 三角方块热图绘制
trisquareheatmap(Z,80,1000,xlb,ylb,'triu') % 上三角
% trisquareheatmap(Z,80,1000,xlb,ylb,'trid') % 下三角

%% 细节优化
% 赋色
colormap(map)
% 字体和字号
set(gca, 'FontName', 'Arial', 'FontSize', 10)
% 背景颜色
set(gcf,'Color',[1 1 1])

函数代码

function trisquareheatmap(data,minsz,maxsz,xlb,ylb,type)
% data - m*n matrix
% minsz   - size of the min square
% maxsz   - size of the max square
% xlb     - xticklabels
% ylb     - yticklabels
% type    - 'trid' lower triangle square heatmap
%         - 'triu' upper triangle square heatmap

% 构造方块位置数据
x = 1:size(data,2);
y = 1:size(data,1);
[X,Y] = meshgrid(x,y);
Z = data;

% 构造网格数据
w = x(2)-x(1);
Xt = (x(1)-w/2):w:(x(end)+w/2);
Yt = (y(1)-w/2):w:(y(end)+w/2);
[Xmesh,Ymesh] = meshgrid(Xt,Yt);
Zmesh = zeros(size(Xmesh));

% 构造方块尺寸数据
minz = min(data(:));
maxz = max(data(:));
S = minsz+(data(:)-minz)./(maxz-minz).*(maxsz-minsz);

% 三角
switch type
    case 'trid'
        % 三角方块数据构造
        temp = triu(ones(size(data)),1);
        idx = find(temp==1);
        data(idx) = NaN;
        Z = data;
        % 三角网格数据构造
        Zmesh = zeros(size(Xmesh));
        temp = triu(ones(size(Zmesh)),2);
        idx2 = find(temp==1);
        Zmesh(idx2) = NaN;
        % 绘制下三角方块热图
        mesh(Xmesh,Ymesh,Zmesh,'EdgeColor',[0.2 0.2 0.2],'LineWidth',1)
        hold on
        scatter(X(:),Y(:),S,Z(:),'s','filled')
        set(gca,'ydir','reverse')
        view(0,90)
        axis equal tight off
        set(gca,'xticklabels',[])
        for i = 1:size(Z,1)
            text(0.3,Y(i,1),xlb{i},'HorizontalAlignment','right','VerticalAlignment','middle','FontSize',11,'FontName','arial','color','k')
            text(X(1,i),Y(i,1)-0.6,ylb{i},'HorizontalAlignment','center','VerticalAlignment','bottom','FontSize',11,'FontName','arial','color','k')
        end
        colorbar('southoutside')

    case 'triu'
        % 三角方块数据构造
        temp = triu(ones(size(data)));
        idx = find(temp==0);
        data(idx) = NaN;
        Z = data;
        % 三角网格数据构造
        Zmesh = zeros(size(Xmesh));
        temp = triu(ones(size(Zmesh)),-1);
        idx2 = find(temp==0);
        Zmesh(idx2) = NaN;   
        % 绘制上三角方块热图
        mesh(Xmesh,Ymesh,Zmesh,'EdgeColor',[0.2 0.2 0.2],'LineWidth',1)
        hold on
        scatter(X(:),Y(:),S,Z(:),'s','filled')
        set(gca,'ydir','reverse')
        view(0,90)
        axis equal tight off
        set(gca,'yticklabels',[])
        for i = 1:size(Z,1)
            text(X(1,i),0.4,xlb{i},'HorizontalAlignment','center','VerticalAlignment','bottom','FontSize',11,'FontName','arial','color','k')
            text(X(1,i)-0.6,Y(i,1),ylb{i},'HorizontalAlignment','right','VerticalAlignment','middle','FontSize',11,'FontName','arial','color','k')
        end
        colorbar('eastoutside')
end

end

小结

通过自定义 colormap,MATLAB 的可视化能力可以更加灵活和富有表现力。
本案例不仅适合初学者练习,也可以直接用于实际项目中:

✅ 支持任意维度相关性矩阵绘制
✅ 高度定制色彩图层次与风格
✅ 易于嵌入 MATLAB App Designer 或报告系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值