色彩映射的范围

时间:2012-08-10 19:27:25

标签: matlab plot matlab-figure color-mapping

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”中,默认colormapjet)用于每个image,这表明调用函数figure取代之前的colormap定义,将它们重置为默认值。还有哪些函数调用具有此属性?

最后,调用colormap('default')会产生什么影响?鉴于我先前假设调用figurecolormap重置为默认值,以下代码不会像我预期的那样生成包含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

2 个答案:

答案 0 :(得分:4)

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

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

colormap(axisHandle,..)colormap(figurehandle, ...)明确标识正在设置其色彩映射的数字。请注意,colormap(axisHandle,..)语法仍设置图形的颜色图,它只使用axisHandle的父属性来确定要设置的图形。

答案 1 :(得分:0)

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

  

How do I use multiple colormaps in a single figure?

文件交换中还有一个方便的submission

  

freezeColors / unfreezeColors

相关问题