用渐变填充填满曲线下方

3

我可以按照以下方式填充曲线下特定部分的区域:

x = 0:0.01:2*pi;           
y1 = sin(x)+10; 
y2 = repmat(5,length(y1),1);
plot(x,y1);
hold on;

% fill area between 1 and 2
val = [1,2];
for i = 1:2;
    tmp = abs(x-val(i));
    [~,idx(i)] = min(tmp);
end
id = idx(1):1:idx(2);

x2 = x(id);
y1a = y1(id);
y2a = y2(id);
y2a = y2a';

X=[x2,fliplr(x2)];
Y=[y1a,fliplr(y2a)];

fill(X,Y,'b');        

图片描述在此输入

然而,是否有可能使用渐变填充代替纯色填充?例如,使用Jet色图将会很棒。这可行吗?

1个回答

4

第一种方法

在这里,我们需要填充创建的补丁的句柄。最简单的方法是将最后一行更改为:

Hpatch = fill(X,Y,'b'); 

那么我们可以根据 y 值设置颜色数据,并将面颜色进行插值。
cdata=get(Hpatch,'ydata');
cdata=(cdata-min(cdata))/(max(cdata)-min(cdata)); %// normalise
set(Hpatch,'CData',cdata,'FaceColor','interp')

上面的三行代码获取了补丁的ydata,将其归一化,然后将其设置为补丁的颜色数据,并将阴影设置为插值。
默认情况下使用jet color map,但为确保使用jet,请在上述代码之后添加colormap('jet')
注意:规范化是可选的,因为它将自动进行规范化,但我个人更喜欢自己控制它,特别是当处理多个对象时。
输出: enter image description here 方法二:
更简单,但不够具有指导性,可以让Matlab替您完成它,您可以在调用fill时将颜色设置为基于Y:fill(X,Y,Y)

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