概要
本文基于 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 或报告系统