Matlab:如何在同一图中为不同的表面指定不同的色图/色块

the*_*emy 11 matlab color-mapping matlab-figure

我对Matlab很新,并且有一些问题.我在同一个图中有两个表面和一个平面.我想为b使用不同的colormap和colorbar,为c使用另一个colormap和colorbar.s是固定颜色,所以这不是问题.

让我试着解释一下我想要实现的目标:

cmap1 = colormap(topobathy) - > cmap1是64x3双倍的预期

cmap2 =颜色表(redwhitegreen)

使用cmap1创建cdata1(这是我无法弄清楚的第一部分,如何使用cmap1扩展z数据,默认情况下CData包含z值)

B =冲浪(X,Y,Z,cdata1)

使用z值的b的colorbar

c = pcolor(x,y,(z-z0)) - 我想在这个中使用cmap2.

使用(z-z0)值的c的colorbar

这是我到目前为止所遇到的问题

b=surf(x,y,z);
colormap(topobathy);
cbar1=colorbar;
set(get(cbar1,'ylabel'),'String', 'Elevation (m)', 'Rotation', 90)
hold on;
s=surf(x,y,z1,'FaceColor',[0.278 0.788 0.788])
hold on;
change=z-z0;     
c=pcolor(x,y,change)
set(c,'ZData',100 + 0*change); %plotting it above the other surfaces
colormap(redwhitegreen)`
Run Code Online (Sandbox Code Playgroud)

此时,colormap设置为redwhitegreen为b,colorbar为b我无法获得第二个带有自己攀爬的colorbar等.

我在此链接中使用了freezeColors和cbfreeze:http: //blogs.mathworks.com/pick/2009/07/24/using-multiple-colormaps-in-a-single-figure/

但有一件事是在弄乱另一件事(可能都是我的错).我想学习如何在不使用外部m文件的情况下完全控制我的对象.

任何帮助表示赞赏.

Joh*_*lby 16

基本思想是连接颜色贴图,然后移动/缩放CData不同绘图控制柄的颜色数据()以与颜色贴图的所需部分对齐.所以,不知道你的自定义函数或特定的数据,你可以不喜欢colormap(topobathy(64); redwhitegreen(64)),然后缩放CDatab进入范围[1,64]和CDatac进入范围[65128].

MathWorks网站上有一个很好的指南,解释了所有这些(甚至使用surf()pcolor()你的例子一样):

http://www.mathworks.com/support/tech-notes/1200/1215.html#Example_1

对于colorbar,你可以用类似的方式伪造刻度线和标签.以下是为上述示例制作颜色条的粗略注意事项:

h = colorbar;
ticks = [1 16:16:64 64:16:128];
ticks(5:6) = [62 66];
set(h, 'YTick', ticks);

labels = num2str(repmat(linspace(min(Z(:)), max(Z(:)), 5), 1, 2)', 2);
set(h, 'YTickLabel', labels)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述