曲面的渐变颜色
Gradient colors for faces of 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) 的面应为红色。对角线上的所有面都应该是黄色的。
你能帮我画一下吗?
一种方法如下:
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;
如果仔细查看 surf
命令,您会发现可以设置自定义 "colormap",然后使用它代替 Z
数据作为颜色指示剂。
因此,您只需设置适当的 "colormap"。该数据必须与您的 X
和 Y
数据具有相同的维度,并且对于每个数据点,您必须指定您选择的 [R, G, B]
三元组,即 [0, 1, 0]
[0, 0]
坐标,[1, 0, 0]
用于 [1, 1]
坐标,以及这两者之间的一些 "diagonal" 插值。
幸运的是,你已经拥有了,看看你的 X
和 Y
数据!添加两者将为绿色通道提供那种 "diagonal" 插值。反之将给出正确的红色通道。 (缩放有点损坏,因为您的值大于 1.0
,但这些值会 "clipped"。)
这是增强代码:
edges = linspace(0, 1, 10);
[X, Y] = meshgrid(edges);
Z = rand(10);
cm(:, :, 1) = (X + Y); % Red channel
cm(:, :, 2) = 2 - cm(:, :, 1); % Green channel
cm(:, :, 3) = zeros(size(X)); % Blue channel (empty)
h = surf(X, Y, Z, cm); % No need for the FaceColor property
输出如下所示:
希望对您有所帮助!
我有以下 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) 的面应为红色。对角线上的所有面都应该是黄色的。
你能帮我画一下吗?
一种方法如下:
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;
如果仔细查看 surf
命令,您会发现可以设置自定义 "colormap",然后使用它代替 Z
数据作为颜色指示剂。
因此,您只需设置适当的 "colormap"。该数据必须与您的 X
和 Y
数据具有相同的维度,并且对于每个数据点,您必须指定您选择的 [R, G, B]
三元组,即 [0, 1, 0]
[0, 0]
坐标,[1, 0, 0]
用于 [1, 1]
坐标,以及这两者之间的一些 "diagonal" 插值。
幸运的是,你已经拥有了,看看你的 X
和 Y
数据!添加两者将为绿色通道提供那种 "diagonal" 插值。反之将给出正确的红色通道。 (缩放有点损坏,因为您的值大于 1.0
,但这些值会 "clipped"。)
这是增强代码:
edges = linspace(0, 1, 10);
[X, Y] = meshgrid(edges);
Z = rand(10);
cm(:, :, 1) = (X + Y); % Red channel
cm(:, :, 2) = 2 - cm(:, :, 1); % Green channel
cm(:, :, 3) = zeros(size(X)); % Blue channel (empty)
h = surf(X, Y, Z, cm); % No need for the FaceColor property
输出如下所示:
希望对您有所帮助!