如何在不同的子图中应用不同的颜色映射?

5
我正在做更多或更少以下的事情:

我正在进行以下操作:

figure
for ii=1:4
    subplot(2,2,ii)
    imshow(image(ii))
    hcb = colorbar;

    switch ii
        case 1
            colormap(myMap)
            set(hcb,'YTickLabel', .. )
            set(hcb,'YTick', .. )
        case 2
            colormap(myMap)
            set(hcb,'YTickLabel', .. )
            set(hcb,'YTick', .. )
        case 3
            colormap(myMap)
            set(hcb,'YTickLabel', .. )
            set(hcb,'YTick', .. )
        case 4
            colormap(aDifferentMap)
            set(hcb,'YTickLabel', .. )
            set(hcb,'YTick', .. )
    end
end

我所面临的问题是,对于第四个图(ii=4),调用colormap(aDifferentMap)会影响前三个图:在我的最终图中,所有的色条都具有aDifferentMap的颜色映射,而且还会对YTick属性造成一些问题。
如果我在第4个情况下注释掉colormap(aDifferentMap),那么一切都很好(除了第四个子图将具有错误的颜色映射和没有任何Ytickes)。
我该怎么处理?如何设置subplot(2,2,4)的属性而不影响1到3的子图?
3个回答

6
对于Matlab 2014a及之前的版本,适用Phil Goddard的答案,您需要使用来自FileExchange的freezeColors等工具。
在Matlab 2014b中,通过将图形引擎更新到版本HG-2,该问题得到解决。现在,调色板影响图中的所有坐标轴,除非您单独设置一个坐标轴的调色板。(来自文档
figure
ax1 = subplot(2,1,1);
surf(peaks)
colormap(ax1,spring)

ax2 = subplot(2,1,2);
surf(peaks)
colormap(ax2,winter)

enter image description here


1
经过在meta中的快速检查,我发现这是我应该接受的答案,因为它更完整,可能对未来的读者更有用。然而,在R2011a上,我通过Phil Goddard的链接找到了我的解决方案。也就是说,我使用了freezeColors作者建议的两个工具,即freezeColorscbfreeze工具。 - natario
接受Phil的答案完全没有问题,因为他首先解决了你的问题。我只是觉得他的答案不够完整,特别是因为它的有效性最近发生了变化。 - Robert Seifert

1

色图是图形的属性,而不是轴的属性,因此更改一个子图的色图会影响所有子图。

请查看在单个图中使用多个色图,以获取解决方案示例。


0

如果您只想在图中显示具有不同颜色映射的图像,则可以使用ind2rgb

load flujet;
subplot(221); image(ind2rgb(X, gray(63)));
subplot(222); image(ind2rgb(X, jet(63)));
subplot(223); image(ind2rgb(X, hot(63)));
subplot(224); image(ind2rgb(X, copper(63)));

然而,在早期版本的MATLAB中仍然无法显示不同的色条。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接