0

colormap范围如何matlab?下面的示例似乎表明它不是词法范围的,因为在代码块中设置的值可以在该块之外访问。

% example 1
for i=1:3
    colormap('gray');
    subplot(2,2,i);
    imagesc(eye(5));
end
subplot(2,2,4);
imagesc(eye(5));

此外,它的定义似乎取决于是否调用了其他函数(例如figure)。在以下两个示例中,colormap似乎是根据是否调用其他函数来动态限定范围的。

% example 2
colormap(gray);
for i=1:4
    subplot(2,2,i);
    imagesc(eye(5));
end

% example 3
colormap(gray);
figure;
for i=1:4
    subplot(2,2,i);
    imagesc(eye(5));
end

在“示例 2”中,灰色映射应用于每个image. 在“示例 3”中,每个 都使用默认值colormap( jet) image,这表明调用该函数会figure取代以前的colormap定义,将它们重置为默认值。还有哪些其他函数调用具有此属性?

最后,调用的效果是colormap('default')什么?鉴于我之前的假设,即调用将figure重置colormap为默认值,以下代码不会像我预期的那样生成带有gray colormap. 相反,所有数字都使用jet colormap. 在什么意义上已经gray colormap被默认了?

% example 4
colormap(gray);
colormap('default');
figure;
for i=1:4
    subplot(2,2,i);
    imagesc(eye(5));
end
4

2 回答 2

4

同一图中的所有相关图形对象共享一个颜色图。'colormap'每个图形都在属性中维护一个颜色图。例如:get(gcf,'colormap')

colormap('NAME')适用于当前数字。这具有的效果set(gcf,'ColorMap',cm)

colormap(axisHandle,..)colormap(figurehandle, ...)明确标识正在设置其颜色图的图形。请注意,colormap(axisHandle,..)语法仍然设置图形的颜色图,它只是使用 axisHandle 的 parent 属性来确定正在设置的图形。

于 2012-08-10T20:18:10.857 回答
0

正如@Pursuit解释的那样,一个图形只有一个颜色图,它被包含在其中的所有轴/图像应用。尽管如此,还是有办法克服这个问题:

如何在单个图中使用多个颜色图?

File Exchange 上还有一个方便的提交:

freezeColors / unfreezeColors

于 2012-08-11T11:31:27.097 回答