heatmap函数是MATLAB中绘制热力图的直接高效工具,支持矩阵输入、行列标签指定、表格自动聚合、颜色与格式自定义及交互式探索五种方式。

如果您在MATLAB中需要将二维数值矩阵或表格数据以颜色梯度形式直观呈现,则heatmap函数是直接、高效的选择。以下是实现热力图绘制的多种方式:
一、使用矩阵数据绘制基础热力图
当已有预聚合的二维数值矩阵时,可直接传入heatmap函数,每个矩阵元素对应一个色块,颜色深浅反映数值大小。该方式无需额外分组或统计,适用于已知密度或相关性矩阵的场景。
1、在命令行或脚本中定义一个10×10的随机数值矩阵:
data = rand(10, 10);
2、调用heatmap函数绘制:
h = heatmap(data);
3、运行后将自动生成带默认坐标轴标签和图例的热力图窗口,行列索引自动编号为1至10。
二、指定行列标签绘制带语义的热力图
为提升可读性,可显式提供x轴与y轴的文本标签,使每个色块对应具体类别(如月份、产品型号、基因名称等),要求标签数量必须与矩阵行列数严格一致。
1、定义行标签与列标签:
months = {'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct'};
products = {'A','B','C','D','E','F','G','H','I','J'};
2、生成对应维度的销售数据矩阵:
sales_data = randi([0, 100], 10, 10);
3、调用带标签的heatmap函数:
h = heatmap(months, products, sales_data);
4、添加标题增强信息表达:
h.Title = 'Monthly Sales Performance';
三、基于表格数据自动聚合生成热力图
当原始数据为长格式表格(如多行观测记录)时,heatmap可按指定两列变量自动统计频次或计算均值,省去手动调用accumarray或groupsummary的步骤,特别适合处理患者记录、实验重复、用户行为日志等结构化表数据。
1、加载示例表格(如内置patients数据集):
load patients;
tbl = table(Gender, SmokingStatus, SelfAssessedHealthStatus);
2、以Gender为x轴、SmokingStatus为y轴,统计每组出现频次:
h = heatmap(tbl, 'Gender', 'SmokingStatus');
3、若需按第三列(如SelfAssessedHealthStatus)计算均值而非频次:
h = heatmap(tbl, 'Gender', 'SmokingStatus', 'ColorVariable', 'SelfAssessedHealthStatus');
4、设置颜色聚合方法为中位数以降低异常值影响:
h.ColorMethod = 'median';
四、自定义颜色映射与显示格式
默认parula配色虽具感知均匀性,但不同分析目标需匹配特定视觉逻辑:例如高风险区域需突出显示,或满足出版物灰度打印要求。通过修改colormap和单元格标签格式,可精准控制输出表现。
1、应用内置冷暖对比更强的'hot'配色:
colormap(h, 'hot');
2、创建自定义RGB颜色映射(如蓝→白→红):
colors = [0 0 1; 1 1 1; 1 0 0];
colors_map = interp1([0,0.5,1], colors, linspace(0,1,256), 'linear');
colormap(h, colors_map);
3、设置单元格内显示三位小数的数值标签:
h.CellLabelFormat = '%0.3f';
4、隐藏所有单元格数值仅保留颜色分布:
h.DisplayDataTips = 'off';
h.CellLabelVisibility = 'off';
五、交互式探索与布局调整
生成的HeatmapChart对象支持实时交互操作,无需重绘即可动态聚焦关键区域、重新排序行列、校验数据点,大幅缩短探索周期。
1、鼠标悬停任意色块,弹出数据提示框显示精确坐标与数值;
2、滚动鼠标滚轮进行缩放,或按住+/-键微调缩放比例;
3、点击并拖拽某一行标签,将其移动至新位置以自定义排列顺序;
4、将鼠标悬停于行/列标签右侧图标上,单击按升序排列,双击降序,三击恢复原始顺序;
5、右键点击热力图空白处,在弹出菜单中选择“Edit Data Tips”可增删数据提示中显示的字段。











