我在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');
如何为所有3个子图使用相同的colobars?
答案 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
相同。您还可以更改颜色条上的限制以显示颜色条的特殊范围。应该要求这两个备选方案,并且足以自定义色条的范围。
我也想给你一个警告。不要使用gcf
和gca
函数。这些返回当前数字,可能不是您认为的当前数字。人类交互(可能还有其他事情)可以改变当前的数字(例如通过点击它)。这意味着即使代码看起来很棒,输出也可能不是预期的输出。由于图形处理方式的一些变化,这个问题似乎在2014b之后变得更糟。但是,函数gca
往往比gca
引起更少的问题,因为交互式更改图形上的当前轴比当前图形本身要复杂得多。
答案 1 :(得分:0)
您可以通过以下方式定义颜色栏选项:http://www.mathworks.com/help/matlab/ref/colorbar.html?searchHighlight=colorbar%20plot
顺便说一句,你可以采取不同的方式:
1.如果你可以改变values1,2,3
,你可以设置' 1'或任何其他颜色条尺度的最小限制。
2.使用此链接中的方式 - 您可以用手定义此限制,但仍会获得空值的黑色矩形。