如何使用色彩图而不是纯色填充色块对象?

BAD*_*EED 6 matlab plot colormap

我需要创建一个如下图所示的图:

我要复制的模型

我写了这段代码:

close all

x = [NaN 1 3 7 9 23 8];
y = [NaN 2 6 7 8 2 1];
z = [NaN 1 4 5 5 4 1];

for n = 1:length(z)-1
    x1 = x(n);
    x2 = x(n+1);
    y1 = y(n);
    y2 = y(n+1);
    z1 = z(n);
    z2 = z(n+1);
    p = patch([x1 x2 x2 x1], [y1 y2 y2 y1], [0 0 z2 z1], [0 1 1]);
    set(p, 'LineStyle', 'none');
    plot3([x1 x2], [y1 y2], [z1 z2], 'b-', 'linewidth', 3);
    hold on
end

view(3);
light
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

由此代码生成的模型

这没关系,但每个补丁面都有一个纯色,我希望有一个基于Z值的颜色渐变,就像在第一个图像中,最低z值是天蓝色,最高z值是白色(带有渐变来自从最低到最高).

如何修改脚本以获得此效果?

gno*_*ice 5

有许多方法可以定义补丁,还有许多方法可以对它们进行着色.这是一种在没有for循环的情况下创建坐标数据的方法,只需调用一个函数即可绘制和着色补丁patch:

x = [NaN 1 3 7 9 23 8];  %# Sample x data
y = [NaN 2 6 7 8 2 1];   %# Sample y data
z = [NaN 1 4 5 5 4 1];   %# Sample z data

N = numel(x);                        %# The number of sample data points
X = [x; x([1 1],[N 1:N-1]); x];      %# X coordinates (one patch per column)
Y = [y; y([1 1],[N 1:N-1]); y];      %# Y coordinates (one patch per column)
Z = [z; z([N 1:N-1]); zeros(2,N)];   %# Z coordinates (one patch per column)
C = round(63.*Z./max(Z(:)))+1;       %# Color map index
map = [linspace(0,1,64).' ...       %'# Color map (64 values spanning from
       ones(64,2)];                  %#   white to cyan)

figure();                               %# Open a new figure
patch(X,Y,Z,C,'FaceColor','interp',...  %# Plot the patches
      'EdgeColor','none');
colormap(map);                          %# Update color map
hold on;                                %# Add to the plot
line(X(1:2,:),Y(1:2,:),Z(1:2,:),...     %# Plot the line
     'Color','b','LineWidth',2);
view(3);                                %# Change the view
Run Code Online (Sandbox Code Playgroud)

这将为您提供以下图表,其中补丁在最高值处为白色,在最低值处为青色渐变:

在此输入图像描述

索引颜色映射的说明......

map上面的变量是一个介于0和1之间的64×3矩阵.每行代表一个RGB三元组,因此定义了从第1行中的青色到第64行中的白色的唯一颜色.这用作图形颜色映射.Face颜色数据C是此颜色映射中的一组行索引,每个值对应一个Z.最低值Z映射到索引1(颜色映射中为青色),而最大值映射到索引64(颜色映射中为白色).