MATLAB绘制三角热力图(关注就能获取完整可运行的代码)

概要

    • 读取 data.mat 文件,数据为一个 10×10 的矩阵,命名为 Z。

    • 定义 x 和 y 的标签名称,都是表示车辆相关属性(如 Carb、Wt、Hp 等)。

  • 颜色映射设置:

    • 定义了一个名为 map 的颜色矩阵,包含大量 RGB 三元组。

    • 该颜色矩阵可能用于后续的可视化,例如热力图、矩阵图或者相关性图的颜色填充。

整体架构流程

1️⃣ 数据准备阶段

  • 加载数据
    load data.mat
    说明:读取 data.mat 文件,假设内部包含变量 data,为一个 10×10 的矩阵。

  • 定义标签
    xlb 与 ylb 用于图表坐标轴的标签。


2️⃣ 颜色映射定义

  • 定义自定义颜色表 map
    map = [...];
    说明:

    • 提前定义好渐变颜色值数组,范围大致为深色到浅色,类似于自定义 colormap。

    • 用于后续绘制 heatmap 或 imagesc 时的颜色参考。


3️⃣ 数据可视化阶段(后续步骤通常包含)

虽然您的代码没有贴完,以下为常规流程:

  • 绘制矩阵图
    常用函数:

    • imagesc(Z)

    • heatmap

    • pcolorsurf

    • 设置坐标轴标签:set(gca, 'XTickLabel', xlb, 'YTickLabel', ylb)

    • 设置颜色映射:colormap(map)

    • 添加颜色条:colorbar


4️⃣ 美化与输出

  • 字体与标签调整

    • xlabel, ylabel, title 添加标题和说明

    • 字体大小、线宽设置

技术名词解释

1️⃣ 数据相关

  • 矩阵(Matrix)
    多行多列的数字表格,是 MATLAB 里最基础的数据结构。

  • 标签(Label)
    指图表中 X 轴和 Y 轴的描述文字,比如变量名称或分类名称。

  • 相关性矩阵(Correlation Matrix)
    各变量之间两两相关系数的矩阵,常用于统计分析和机器学习特征工程。


2️⃣ 绘图与可视化

  • Colormap(颜色映射表)
    定义一组颜色梯度,用于将数值映射为颜色。MATLAB 中可以自定义或使用内置的如 jet、parula、hot 等。

  • imagesc
    MATLAB 函数:显示一个矩阵并根据数值大小用颜色填充,自动缩放颜色范围。

  • heatmap
    MATLAB 函数:显示热力图,是一种矩阵可视化方式,支持更丰富的标签和交互。

  • colorbar
    MATLAB 函数:添加颜色条,表示颜色与数值的对应关系。

  • gca(Get Current Axes)
    MATLAB 函数:返回当前图形窗口中的坐标轴对象,用于设置标签、字体、颜色等属性。


3️⃣ MATLAB 术语

  • MAT 文件(.mat 文件)
    MATLAB 特有的文件格式,用于保存变量、矩阵和其他数据结构。

  • set 函数
    MATLAB 函数:用于修改图形对象的属性,如字体大小、线宽、标签等。

  • saveas / print / exportgraphics
    MATLAB 函数:用于将图像导出为 PNG、PDF、SVG 等格式。


4️⃣ 图形美化相关

  • 字体大小(FontSize)
    控制坐标轴标签、标题等文字的显示大小。

  • 线宽(LineWidth)
    控制图形元素(如线条、边框)的粗细。

  • 透明度(Alpha)
    控制颜色或对象的透明程度,heatmap 类图中有时可以设置。

完整代码


clc;clear
%% 数据准备
% 读取数据
load data.mat%数据是10*10的矩阵

% 数据矩
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.403921568627451	0	0.121568627450980
0.411764705882353	0	0.121568627450980
0.419607843137255	0.003921568627451	0.121568627450980
0.431372549019608	0.007843137254902	0.125490196078431
0.443137254901961	0.007843137254902	0.125490196078431
0.454901960784314	0.011764705882353	0.125490196078431
0.462745098039216	0.015686274509804	0.129411764705882
0.482352941176471	0.023529411764706	0.133333333333333
0.490196078431373	0.027450980392157	0.133333333333333
0.501960784313725	0.031372549019608	0.137254901960784
0.513725490196078	0.035294117647059	0.137254901960784
0.533333333333333	0.039215686274510	0.141176470588235
0.541176470588235	0.043137254901961	0.141176470588235
0.560784313725490	0.050980392156863	0.145098039215686
0.568627450980392	0.050980392156863	0.145098039215686
0.580392156862745	0.054901960784314	0.149019607843137
0.592156862745098	0.058823529411765	0.149019607843137
0.603921568627451	0.062745098039216	0.152941176470588
0.611764705882353	0.062745098039216	0.152941176470588
0.619607843137255	0.066666666666667	0.152941176470588
0.631372549019608	0.070588235294118	0.156862745098039
0.639215686274510	0.074509803921569	0.156862745098039
0.654901960784314	0.078431372549020	0.160784313725490
0.670588235294118	0.082352941176471	0.160784313725490
0.678431372549020	0.086274509803922	0.164705882352941
0.690196078431373	0.090196078431373	0.164705882352941
0.698039215686274	0.098039215686275	0.168627450980392
0.705882352941177	0.105882352941176	0.176470588235294
0.709803921568627	0.117647058823529	0.180392156862745
0.713725490196078	0.129411764705882	0.184313725490196
0.717647058823529	0.137254901960784	0.188235294117647
0.725490196078431	0.145098039215686	0.192156862745098
0.733333333333333	0.164705882352941	0.200000000000000
0.737254901960784	0.176470588235294	0.203921568627451
0.745098039215686	0.184313725490196	0.211764705882353
0.749019607843137	0.192156862745098	0.215686274509804
0.749019607843137	0.200000000000000	0.215686274509804
0.756862745098039	0.211764705882353	0.223529411764706
0.764705882352941	0.223529411764706	0.227450980392157
0.772549019607843	0.239215686274510	0.235294117647059
0.772549019607843	0.247058823529412	0.239215686274510
0.776470588235294	0.258823529411765	0.243137254901961
0.784313725490196	0.270588235294118	0.250980392156863
0.788235294117647	0.278431372549020	0.254901960784314
0.796078431372549	0.290196078431373	0.258823529411765
0.800000000000000	0.298039215686275	0.262745098039216
0.803921568627451	0.309803921568627	0.266666666666667
0.807843137254902	0.317647058823529	0.274509803921569
0.815686274509804	0.333333333333333	0.282352941176471
0.823529411764706	0.345098039215686	0.290196078431373
0.827450980392157	0.356862745098039	0.290196078431373
0.835294117647059	0.368627450980392	0.298039215686275
0.839215686274510	0.376470588235294	0.301960784313725
0.843137254901961	0.384313725490196	0.309803921568627
0.847058823529412	0.392156862745098	0.317647058823529
0.850980392156863	0.407843137254902	0.325490196078431
0.854901960784314	0.415686274509804	0.333333333333333
0.858823529411765	0.423529411764706	0.337254901960784
0.866666666666667	0.439215686274510	0.349019607843137
0.870588235294118	0.447058823529412	0.356862745098039
0.874509803921569	0.458823529411765	0.364705882352941
0.878431372549020	0.466666666666667	0.372549019607843
0.882352941176471	0.478431372549020	0.376470588235294
0.882352941176471	0.486274509803922	0.384313725490196
0.890196078431372	0.498039215686275	0.396078431372549
0.898039215686275	0.513725490196078	0.407843137254902
0.898039215686275	0.517647058823529	0.411764705882353
0.905882352941176	0.529411764705882	0.423529411764706
0.909803921568627	0.541176470588235	0.427450980392157
0.913725490196078	0.549019607843137	0.435294117647059
0.917647058823529	0.556862745098039	0.443137254901961
0.921568627450980	0.568627450980392	0.450980392156863
0.925490196078431	0.576470588235294	0.454901960784314
0.929411764705882	0.588235294117647	0.462745098039216
0.937254901960784	0.603921568627451	0.474509803921569
0.941176470588235	0.615686274509804	0.482352941176471
0.949019607843137	0.623529411764706	0.490196078431373
0.949019607843137	0.631372549019608	0.498039215686275
0.952941176470588	0.643137254901961	0.505882352941176
0.956862745098039	0.650980392156863	0.513725490196078
0.956862745098039	0.658823529411765	0.525490196078431
0.960784313725490	0.666666666666667	0.537254901960784
0.960784313725490	0.674509803921569	0.545098039215686
0.960784313725490	0.682352941176471	0.552941176470588
0.960784313725490	0.694117647058824	0.568627450980392
0.964705882352941	0.698039215686274	0.580392156862745
0.964705882352941	0.705882352941177	0.588235294117647
0.968627450980392	0.713725490196078	0.596078431372549
0.968627450980392	0.721568627450980	0.603921568627451
0.968627450980392	0.729411764705882	0.615686274509804
0.968627450980392	0.741176470588235	0.627450980392157
0.972549019607843	0.749019607843137	0.639215686274510
0.972549019607843	0.752941176470588	0.647058823529412
0.976470588235294	0.764705882352941	0.662745098039216
0.976470588235294	0.772549019607843	0.670588235294118
0.976470588235294	0.776470588235294	0.678431372549020
0.980392156862745	0.788235294117647	0.690196078431373
0.980392156862745	0.796078431372549	0.698039215686274
0.980392156862745	0.800000000000000	0.705882352941177
0.980392156862745	0.807843137254902	0.717647058823529
0.984313725490196	0.823529411764706	0.737254901960784
0.984313725490196	0.831372549019608	0.745098039215686
0.988235294117647	0.835294117647059	0.752941176470588
0.988235294117647	0.843137254901961	0.764705882352941
0.988235294117647	0.850980392156863	0.772549019607843
0.992156862745098	0.858823529411765	0.780392156862745
0.988235294117647	0.862745098039216	0.784313725490196
0.988235294117647	0.870588235294118	0.796078431372549
0.988235294117647	0.870588235294118	0.800000000000000
0.984313725490196	0.874509803921569	0.807843137254902
0.984313725490196	0.878431372549020	0.819607843137255
0.984313725490196	0.882352941176471	0.827450980392157
0.984313725490196	0.886274509803922	0.831372549019608
0.984313725490196	0.890196078431372	0.839215686274510
0.980392156862745	0.894117647058824	0.843137254901961
0.980392156862745	0.898039215686275	0.847058823529412
0.980392156862745	0.905882352941176	0.858823529411765
0.980392156862745	0.909803921568627	0.866666666666667
0.976470588235294	0.913725490196078	0.874509803921569
0.976470588235294	0.917647058823529	0.882352941176471
0.976470588235294	0.921568627450980	0.890196078431372
0.976470588235294	0.925490196078431	0.898039215686275
0.976470588235294	0.929411764705882	0.901960784313726
0.972549019607843	0.933333333333333	0.909803921568627
0.972549019607843	0.933333333333333	0.913725490196078
0.972549019607843	0.941176470588235	0.921568627450980
0.972549019607843	0.949019607843137	0.933333333333333
0.968627450980392	0.952941176470588	0.941176470588235
0.968627450980392	0.956862745098039	0.949019607843137
0.968627450980392	0.960784313725490	0.952941176470588
0.968627450980392	0.960784313725490	0.960784313725490
0.968627450980392	0.964705882352941	0.964705882352941
0.960784313725490	0.964705882352941	0.964705882352941
0.952941176470588	0.960784313725490	0.964705882352941
0.952941176470588	0.960784313725490	0.964705882352941
0.945098039215686	0.956862745098039	0.960784313725490
0.937254901960784	0.952941176470588	0.960784313725490
0.933333333333333	0.952941176470588	0.960784313725490
0.925490196078431	0.949019607843137	0.960784313725490
0.921568627450980	0.945098039215686	0.956862745098039
0.917647058823529	0.945098039215686	0.956862745098039
0.909803921568627	0.941176470588235	0.956862745098039
0.901960784313726	0.937254901960784	0.952941176470588
0.894117647058824	0.933333333333333	0.952941176470588
0.890196078431372	0.933333333333333	0.952941176470588
0.886274509803922	0.929411764705882	0.952941176470588
0.882352941176471	0.925490196078431	0.952941176470588
0.874509803921569	0.925490196078431	0.949019607843137
0.866666666666667	0.917647058823529	0.949019607843137
0.862745098039216	0.917647058823529	0.949019607843137
0.862745098039216	0.917647058823529	0.949019607843137
0.854901960784314	0.913725490196078	0.945098039215686
0.847058823529412	0.909803921568627	0.945098039215686
0.839215686274510	0.905882352941176	0.945098039215686
0.835294117647059	0.905882352941176	0.941176470588235
0.827450980392157	0.901960784313726	0.941176470588235
0.823529411764706	0.898039215686275	0.941176470588235
0.823529411764706	0.898039215686275	0.941176470588235
0.811764705882353	0.894117647058824	0.937254901960784
0.800000000000000	0.886274509803922	0.933333333333333
0.796078431372549	0.886274509803922	0.933333333333333
0.784313725490196	0.874509803921569	0.929411764705882
0.772549019607843	0.870588235294118	0.925490196078431
0.764705882352941	0.866666666666667	0.921568627450980
0.752941176470588	0.862745098039216	0.921568627450980
0.745098039215686	0.858823529411765	0.917647058823529
0.741176470588235	0.854901960784314	0.917647058823529
0.729411764705882	0.850980392156863	0.913725490196078
0.713725490196078	0.843137254901961	0.909803921568627
0.705882352941177	0.839215686274510	0.905882352941176
0.694117647058824	0.831372549019608	0.901960784313726
0.686274509803922	0.831372549019608	0.901960784313726
0.678431372549020	0.827450980392157	0.901960784313726
0.670588235294118	0.823529411764706	0.898039215686275
0.654901960784314	0.811764705882353	0.894117647058824
0.650980392156863	0.811764705882353	0.894117647058824
0.647058823529412	0.807843137254902	0.890196078431372
0.635294117647059	0.803921568627451	0.886274509803922
0.619607843137255	0.796078431372549	0.882352941176471
0.611764705882353	0.792156862745098	0.882352941176471
0.603921568627451	0.788235294117647	0.878431372549020
0.592156862745098	0.784313725490196	0.874509803921569
0.588235294117647	0.780392156862745	0.874509803921569
0.580392156862745	0.772549019607843	0.870588235294118
0.564705882352941	0.768627450980392	0.866666666666667
0.552941176470588	0.760784313725490	0.862745098039216
0.545098039215686	0.756862745098039	0.862745098039216
0.529411764705882	0.745098039215686	0.854901960784314
0.517647058823529	0.737254901960784	0.850980392156863
0.505882352941176	0.733333333333333	0.847058823529412
0.490196078431373	0.721568627450980	0.843137254901961
0.482352941176471	0.717647058823529	0.839215686274510
0.474509803921569	0.713725490196078	0.839215686274510
0.462745098039216	0.705882352941177	0.835294117647059
0.443137254901961	0.690196078431373	0.823529411764706
0.435294117647059	0.682352941176471	0.819607843137255
0.423529411764706	0.678431372549020	0.815686274509804
0.415686274509804	0.670588235294118	0.815686274509804
0.403921568627451	0.662745098039216	0.811764705882353
0.392156862745098	0.654901960784314	0.807843137254902
0.368627450980392	0.643137254901961	0.800000000000000
0.360784313725490	0.639215686274510	0.796078431372549
0.356862745098039	0.635294117647059	0.796078431372549
0.341176470588235	0.627450980392157	0.792156862745098
0.329411764705882	0.615686274509804	0.788235294117647
0.317647058823529	0.607843137254902	0.784313725490196
0.305882352941176	0.603921568627451	0.780392156862745
0.294117647058824	0.592156862745098	0.776470588235294
0.286274509803922	0.588235294117647	0.772549019607843
0.270588235294118	0.580392156862745	0.768627450980392
0.258823529411765	0.572549019607843	0.760784313725490
0.254901960784314	0.568627450980392	0.760784313725490
0.250980392156863	0.560784313725490	0.756862745098039
0.247058823529412	0.552941176470588	0.752941176470588
0.239215686274510	0.545098039215686	0.749019607843137
0.235294117647059	0.541176470588235	0.745098039215686
0.231372549019608	0.533333333333333	0.741176470588235
0.223529411764706	0.525490196078431	0.737254901960784
0.223529411764706	0.521568627450980	0.737254901960784
0.215686274509804	0.513725490196078	0.733333333333333
0.207843137254902	0.505882352941176	0.725490196078431
0.203921568627451	0.498039215686275	0.725490196078431
0.200000000000000	0.490196078431373	0.721568627450980
0.196078431372549	0.486274509803922	0.717647058823529
0.192156862745098	0.482352941176471	0.717647058823529
0.184313725490196	0.474509803921569	0.709803921568627
0.176470588235294	0.462745098039216	0.705882352941177
0.172549019607843	0.458823529411765	0.701960784313725
0.172549019607843	0.458823529411765	0.701960784313725
0.164705882352941	0.447058823529412	0.698039215686274
0.156862745098039	0.439215686274510	0.690196078431373
0.156862745098039	0.431372549019608	0.690196078431373
0.149019607843137	0.423529411764706	0.690196078431373
0.145098039215686	0.419607843137255	0.686274509803922
0.141176470588235	0.415686274509804	0.682352941176471
0.133333333333333	0.403921568627451	0.674509803921569
0.125490196078431	0.396078431372549	0.670588235294118
0.121568627450980	0.388235294117647	0.662745098039216
0.121568627450980	0.384313725490196	0.650980392156863
0.117647058823529	0.376470588235294	0.639215686274510
0.113725490196078	0.368627450980392	0.631372549019608
0.109803921568627	0.360784313725490	0.619607843137255
0.101960784313725	0.349019607843137	0.603921568627451
0.098039215686275	0.341176470588235	0.596078431372549
0.098039215686275	0.341176470588235	0.588235294117647
0.090196078431373	0.329411764705882	0.576470588235294
0.086274509803922	0.317647058823529	0.560784313725490
0.082352941176471	0.309803921568627	0.552941176470588
0.078431372549020	0.301960784313725	0.541176470588235
0.074509803921569	0.298039215686275	0.533333333333333
0.070588235294118	0.290196078431373	0.521568627450980
0.066666666666667	0.278431372549020	0.505882352941176
0.058823529411765	0.266666666666667	0.490196078431373
0.054901960784314	0.262745098039216	0.486274509803922
0.054901960784314	0.258823529411765	0.478431372549020];

% map = flipud(map);

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

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

%% 三角热图绘制
% triheatmap(Z,map,xlb,ylb,'trid') % 下三角
triheatmap(Z,map,xlb,ylb,'triu') % 上三角

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

函数代码

function triheatmap(data,map,xlb,ylb,type)
% data - m*n matrix
% map  - colormap matrix
% xlb     - xticklabels
% ylb     - yticklabels
% type    - 'trid' lower triangle bubble heatmap
%         - 'triu' upper triangle bubble heatmap

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

% 构造网格数据
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);
Ymesh = flipud(Ymesh);

% 三角
switch type
    case 'trid'
        % 三角热图数据构造
        temp = triu(ones(size(data)),1);
        idx = find(temp==1);
        data(idx) = NaN;
        Z = data;
        xp = [X(:)-w/2,X(:)+w/2,X(:)+w/2,X(:)-w/2];
        yp = [Y(:)+w/2,Y(:)+w/2,Y(:)-w/2,Y(:)-w/2];
        % 三角网格数据构造
        Zmesh = zeros(size(Xmesh));
        temp = triu(ones(size(Zmesh)),2);
        idx2 = find(temp==1);
        Zmesh(idx2) = NaN;   
        % 颜色构造
        minc = min(data(:));
        maxc = max(data(:));
        num = size(map,1);
        x = linspace(minc,maxc,num);
        cmap = interp1(x,map,data(:),'linear'); %...插值
        % 三角热图绘制
        for i = 1:length(data(:))
            if isnan(data(i))
                patch(xp(i,1:4),yp(i,1:4),[1 1 1],'edgecolor','none')
            else
                patch(xp(i,1:4),yp(i,1:4),cmap(i,1:3),'edgecolor','none')
            end
        end
        hold on
        mesh(Xmesh,Ymesh,Zmesh,'facecolor','none','EdgeColor',[0.2 0.2 0.2],'LineWidth',1)
        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')
        caxis([minc maxc])

    case 'triu'
        % 三角热图数据构造
        temp = triu(ones(size(data)));
        idx = find(temp==0);
        data(idx) = NaN;
        Z = data;
        xp = [X(:)-w/2,X(:)+w/2,X(:)+w/2,X(:)-w/2];
        yp = [Y(:)+w/2,Y(:)+w/2,Y(:)-w/2,Y(:)-w/2];
        % 三角网格数据构造
        Zmesh = zeros(size(Xmesh));
        temp = triu(ones(size(Zmesh)),-1);
        idx2 = find(temp==0);
        Zmesh(idx2) = NaN;   
        % 颜色构造
        minc = min(data(:));
        maxc = max(data(:));
        num = size(map,1);
        x = linspace(minc,maxc,num);
        cmap = interp1(x,map,data(:),'linear'); %...插值
        % 三角热图绘制
        for i = 1:length(data(:))
            if isnan(data(i))
                patch(xp(i,1:4),yp(i,1:4),[1 1 1],'edgecolor','none')
            else
                patch(xp(i,1:4),yp(i,1:4),cmap(i,1:3),'edgecolor','none')
            end
        end
        hold on
        mesh(Xmesh,Ymesh,Zmesh,'facecolor','none','EdgeColor',[0.2 0.2 0.2],'LineWidth',1)
        view(0,90)
        axis equal tight off
        set(gca,'yticklabels',[])
        for i = 1:size(Z,1)
            text(X(1,i),Y(1)+0.5,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')
        caxis([minc maxc])
end

end

小结

这个比一般的热力图更好看,也简洁,通过这个比数据呈现的更加的明显。数据常用的一种表达形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值