我有以下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)的面应为红色。对角线上的所有面孔都应为黄色。
您能帮我表演这幅画吗?
答案 0 :(得分:4)
如果您仔细查看surf
命令,您会看到可以设置一个自定义的“ colormap”,然后将其用作Z
数据的颜色指示符。
因此,您只需要设置一个适当的“颜色图”。该数据必须与X
和Y
数据具有相同的尺寸,并且对于每个数据点,您必须指定所选的[R, G, B]
三元组,即{ {1}}坐标,[0, 1, 0]
代表[0, 0]
坐标,并且两者之间有一些“对角线”插值。
幸运的是,您已经掌握了[1, 0, 0]
和[1, 1]
数据!将两者相加将为绿色通道提供这种“对角”插值。相反,将给出正确的红色通道。 (由于您的值大于X
,因此缩放比例有些混乱,但是这些值会“被裁剪”。)
以下是增强的代码:
Y
输出看起来像这样:
希望有帮助!
答案 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;