Matlab表面绘图自定义颜色

4
我已经在Matlab中加载了一些地形数据,并创建了surf、surfl和contour图,使用colormap对数据进行着色。这些地形数据的范围从0到2500米。
我想绘制一张地图,将任何低于200米的地形涂成蓝色,高于500米的地形涂成红色,200至500米之间的地形涂成绿色。这样做有可能吗?有谁能给我关于所需命令的提示吗?
非常感谢。
2个回答

6

您可以通过调整colormapsurf的第四个输入参数来进行操作。

以下图表:

enter image description here

是由以下代码生成的:

[X,Y,Z] = peaks(1000);

%colormap
cmap = [0.6 0.2 0.4; 
        0.5 0.5 0.5; 
        0.1 0.9 0.9];  

Zcolor = zeros(size(Z));                   
threshold = 2;
Zcolor(Z <= -threshold)                 = 1;  % first row of cmap
Zcolor(Z > -threshold & Z < threshold)  = 2;  % second row of cmap
Zcolor(Z >= threshold)                  = 3;  % third row of cmap

figure('Color','w');
surf(X, Y, Z, Zcolor, 'EdgeColor', 'None');
colormap(cmap); 
light('Position', [0 -2 1])

谢谢您的回复!非常有帮助。然而,当我修改代码以适应我的数据时,“Zcolor(Z <= -threshold)= 1;”无法正常工作。也就是说,它没有使用cmap第一行中定义的颜色,而是使用了其他行。这在所有三个“Zcolor”行中都发生了。 - user3035970
MATLAB 对这些数据执行线性变换,以从当前的颜色映射中获取颜色。通常,最低的 Zcolor 值将被分配到颜色映射的最小值,而最高的 Zcolor 将被分配到最大值。在这两个值之间的所有内容都将被缩放。 - marsei

2
hsurf=surf(...)
set(hsurf,'FaceColor','interp')

请查阅doc surf以获取更多信息。


这并没有改变图形的样式。你能告诉我如何使用它来将每个高度设置为一种颜色吗? - user3035970

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