如何确定将颜色与matlab中的热图中的值相关联?

Jul*_*iaR 5 matlab plot heatmap matlab-figure

我有一个整数矩阵M(1,2或3).我想用热图表示它并将固定颜色与1,2和3相关联.我使用这段代码:

map = [1, 1, 0;  % color for 1 (yellow)
       1, 0.5, 0 ; % color for 2 (orange)
       0, 1, 0.5]; % color for 3 (green)

HeatMap(M,'Colormap',map,'Symmetric','false'); 
Run Code Online (Sandbox Code Playgroud)

当M包含至少一个1,一个2和一个3时,没有任何问题.但是当M仅包含3个时,热图不是我想要的(全绿色).我怎么解决这个问题?

And*_*uri 3

看来你不能轻易做到这一点。在 Matlab 2013b 或更早版本(我在 2014b 中没有尝试过)中,当您HeatMap在内部调用它时,会经历创建轴和设置颜色等的过程。最终它到达了plot.m调用以下函数的地方:

function scaleHeatMap(hHMAxes, obj)
%SCALEHEATMAP Update the CLIM in image axes
if obj.Symmetric
    maxval = min(max(abs(obj.Data(:))), obj.DisplayRange);
    minval = -maxval;
else
    maxval = min(max(obj.Data(:)), obj.DisplayRange);
    minval = min(obj.Data(:));
end
set(hHMAxes, 'Clim', [minval,maxval]);
end
Run Code Online (Sandbox Code Playgroud)

该函数实际上确实使用热图 ( ) 的轴定义了颜色图的限制hHMAxes,但不幸的是,调用不会返回该对象HeatMap()

我能想到摆脱这个问题的唯一方法是:

  1. 修改plot.m功能。这通常是一个非常糟糕的主意。
  2. 创建一个myHeatMap函数,它可以执行原始函数所做的所有操作,但对Clim轴上的属性进行了更改的功能。
  3. HeatMap根本不要使用并使用例如surf或创建一个外观相同的图imshow
  4. if在调用之前执行一条语句HeatMap,并检查颜色图中是否有单个值 ( numel(unique(M(:)))==1),如果发生这种情况,请将您的map颜色图更改为您选择的颜色的单值颜色图。

到目前为止,最简单的一个是 4。

  • 非常感谢您如此准确的回复:) (2认同)