对子图中的每个热图使用相同的颜色条

时间:2015-08-04 13:09:32

标签: matlab heatmap colorbar

我在Matlab中使用以下代码来创建一个由3个子图组成的图形。每个子图都是热图。通常,使用热图显示的所有值都在1到6的范围内。问题是有时,其中一个子图的数据不包含所有值。这会导致子图的颜色不同。

clf
set(gcf, 'Color', 'None');
set(gca, 'Color', 'None');
set(gca, 'LooseInset', get(gca, 'TightInset'));

subplot(3,1,1);
heatmap(values1, [], [], [], 'ColorMap', @cool, 'NaNColor', [0 0 0], 'ColorBar', true);

subplot(3,1,2);
heatmap(values2, [], [], [], 'ColorMap', @cool, 'NaNColor', [0 0 0], 'ColorBar', true);

subplot(3,1,3);
heatmap(values3, [], [], [], 'ColorMap', @cool, 'NaNColor', [0 0 0], 'ColorBar', true);

fname = 'path';
saveas(gca, fullfile(fname, filename), 'png');

enter image description here

如何为所有3个子图使用相同的colobars?

2 个答案:

答案 0 :(得分:2)

除了另一个答案的精彩链接外,我想给你两种修改颜色条的方法。颜色条的范围设置在轴上。

function test()
[xx,yy,zz]=peaks();

h_surf = surf(xx,yy,zz);
h_cbar = colorbar();
h_axes = get(h_surf,'Parent');

pause(2);
set(h_axes,'CLim',[0,8]);
pause(2);
set(h_cbar,'Limits',[4,8]);

像这样设置属性CLim与使用函数caxis相同。您还可以更改颜色条上的限制以显示颜色条的特殊范围。应该要求这两个备选方案,并且足以自定义色条的范围。

我也想给你一个警告。不要使用gcfgca函数。这些返回当前数字,可能不是您认为的当前数字。人类交互(可能还有其他事情)可以改变当前的数字(例如通过点击它)。这意味着即使代码看起来很棒,输出也可能不是预期的输出。由于图形处理方式的一些变化,这个问题似乎在2014b之后变得更糟。但是,函数gca往往比gca引起更少的问题,因为交互式更改图形上的当前轴比当前图形本身要复杂得多。

答案 1 :(得分:0)

您可以通过以下方式定义颜色栏选项:http://www.mathworks.com/help/matlab/ref/colorbar.html?searchHighlight=colorbar%20plot

顺便说一句,你可以采取不同的方式: 1.如果你可以改变values1,2,3,你可以设置' 1'或任何其他颜色条尺度的最小限制。 2.使用此链接中的方式 - 您可以用手定义此限制,但仍会获得空值的黑色矩形。