矩阵热力图(Matrix Heatmap)是一种高效的数据可视化形式,通过颜色梯度(如深色表示高值,浅色表示低值)和数字标签的结合,直观呈现矩阵数据的分布规律。在MATLAB中实现此类热力图时,可通过添加蓝色虚线框线来突出关键区域或特殊数据点,从而增强图表的可读性与分析价值。
该方法适用于多维数据对比、聚类分析或异常值标注等场景,既能保留原始数据的精确性,又能通过视觉元素快速传递核心信息。
样图展示
这种热力图在数据分析中非常实用,尤其适合以下场景:
-
资源调度优化(如您的案例):
展示不同铲位(行)与卸点(列)之间的运输量,快速识别高负荷/闲置的铲位和卸点。
(例如:铲位1的岩石漏运输量81为深色高值,铲位5-7全为0值需关注) -
异常检测:
蓝色框线可标注异常数据(如极高/极低值、关键目标区域),便于聚焦分析。 -
模式识别:
通过颜色梯度直观发现数据分布规律(如铲位2同时服务多个卸点,铲位10集中在倒装场II)。 -
决策支持:
辅助优化资源分配(如调整铲位任务、平衡卸点负载)。
代码实现
实现代码功能分析
该代码实现了一个露天矿运输次数分配热力图的可视化功能,主要包含以下技术要点:
% 定义铲位和卸点标签
shovelLabels = {'铲位1', '铲位2', '铲位3', '铲位4', '铲位5', ...
'铲位6', '铲位7', '铲位8', '铲位9', '铲位10'};
unloadLabels = {'矿石漏', '倒装场I', '倒装场II', '岩石漏', '岩场'};
数据矩阵构建
运输数据矩阵采用10×5结构(10铲位×5卸点),数值表示运输次数:
transportData = [0 0 0 81 0; % 铲位1
13 42 13 0 0; % 铲位2
0 0 2 43 0; % 铲位3
0 43 0 0 0; % 铲位4
0 0 0 0 0; % 铲位5
0 0 0 0 0; % 铲位6
0 0 0 0 0; % 铲位7
54 0 0 0 0; % 铲位8
0 0 0 0 0; % 铲位9
11 0 70 0 15]; % 铲位10
可视化定制技术
创建橙色渐变颜色映射:
orangeGradient = [linspace(1,1,64)' linspace(1,0.4,64)' linspace(1,0,64)'];
热力图基础设置包含:
- 图例范围[0 80]
- 中文黑体支持
- 自定义单元格格式
- 网格线隐藏
h = heatmap(unloadLabels, shovelLabels, transportData);
h.Title = '原则1露天矿运输次数分配热力图';
h.Colormap = orangeGradient;
h.ColorLimits = [0 80];
h.ColorbarVisible = 'on';
h.CellLabelFormat = '%d';
h.FontName = 'SimHei';
h.FontSize = 12;
h.GridVisible = 'off';
特殊元素标注
通过坐标计算实现行高亮标注:
highlightRows = [1, 2, 3, 4, 8, 10];
for i = 1:length(highlightRows)
rowIdx = highlightRows(i);
yPos = axPos(2) + axPos(4) - rowIdx * rowHeight;
annotation('rectangle', ...
[axPos(1), yPos, axPos(3), rowHeight], ...
'EdgeColor', 'b', ...
'LineStyle', '--', ...
'LineWidth', 1.5);
end
兼容性处理
多版本MATLAB颜色条获取方案:
try
cbar = h.Colorbar;
catch
try
cbar = h.ColorbarHandle;
catch
end
end
颜色条最终设置包含:
- 固定刻度间隔
- 中文标签支持
- 单位标注
cbar.Ticks = [0 20 40 60 80];
cbar.TickLabels = {'0', '20', '40', '60', '80'};
cbar.Label.String = '运输次数';
cbar.Label.FontSize = 12;
cbar.Label.FontName = 'SimHei';