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

How to apply different colormaps in different subplots?

我或多或少做了以下事情:

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

我面临的是为第四个图调用 colormap(aDifferentMap) (ii=4),把前三个图搞砸了:在我的最终图中,所有颜色条都有 aDifferentMap 颜色图,YTick 属性也有一些问题。

如果我在案例 4 中注释掉 colormap(aDifferentMap),它一切正常(除了第四个子图,它将有一个错误的颜色图并且没有任何 Ytickes)。

我该如何处理?如何在不影响子图 1:3 的情况下设置 subplot(2,2,4) 的属性?

颜色图是图的 属性,而不是坐标轴,因此为子图更改它会更改所有子图。

查看 Using multiple colormaps in a single figure 的解决方案示例。

对于 Matlab 2014a 及之前版本 应用来自 FileExchange 的 and you need to use e.g. freezeColors


Matlab 2014b 中,问题已通过 update of the graphics engine to version HG-2. Now the colormap affects all axes in the figure, unless you set an axes colormap separately. (from doc)

解决
figure
ax1 = subplot(2,1,1);
surf(peaks)
colormap(ax1,spring)

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

如果您只想在图中显示具有不同颜色图的图像,您可以使用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 中仍然无法显示不同的颜色条。