表面的渐变颜色

时间:2019-06-19 11:26:22

标签: matlab 3d data-visualization matlab-figure surface

我有以下MATLAB代码:

close all
clear all
clc
edges= linspace(0,1,10);
[X,Y] = meshgrid(edges);
Z=rand(10);
h= surf(X,Y,Z,'FaceColor','none')

我需要在此表面上绘制面孔。坐标为(0,0)的面应为绿色,坐标为(1,1)的面应为红色。对角线上的所有面孔都应为黄色。

您能帮我表演这幅画吗?

2 个答案:

答案 0 :(得分:4)

如果您仔细查看surf命令,您会看到可以设置一个自定义的“ colormap”,然后将其用作Z数据的颜色指示符。

因此,您只需要设置一个适当的“颜色图”。该数据必须与XY数据具有相同的尺寸,并且对于每个数据点,您必须指定所选的[R, G, B]三元组,即{ {1}}坐标,[0, 1, 0]代表[0, 0]坐标,并且两者之间有一些“对角线”插值。

幸运的是,您已经掌握了[1, 0, 0][1, 1]数据!将两者相加将为绿色通道提供这种“对角”插值。相反,将给出正确的红色通道。 (由于您的值大于X,因此缩放比例有些混乱,但是这些值会“被裁剪”。)

以下是增强的代码:

Y

输出看起来像这样:

Output

希望有帮助!

答案 1 :(得分:3)

一种方法如下:

edges= linspace(0,1,10);
[X,Y] = meshgrid(edges);
Z=rand(10);


% Fake some color data
cdata = zeros(size(Z));

for i = 1:size(cdata,1)
    cdata(i,i) = i; 
end

%make a suitable colormap

cm = ones(size(cdata,1), 3);
cm = cm .*[ 1 1 0 ] % everything yellow
cm(1, :) = [1 1 1] % except for 0
cm(2, :) = [1 0 0] % except for 1
cm(end, :) = [0 1 0] % except for 10

ax = axes();
h = surface(ax, X,Y,Z);
h.CData = cdata;
ax.Colormap = cm;

enter image description here