用渐变填充填充曲线下方

时间:2014-06-03 16:22:22

标签: matlab plot

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

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');        

enter image description here

然而,是否可以使用渐变填充而不是纯色?

例如,使用jet colormap会很棒。这可能吗?

1 个答案:

答案 0 :(得分: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,请在上面的代码之后添加行colormap('jet')

注意:规范化是可选的,因为它会自动标准化,但我个人更愿意自己控制它,特别是在处理多个对象时。

输出

enter image description here


方法二

更简单但不那么有启发性,让Matlab为你做,你可以在填充调用中将颜色设置为基于Y:fill(X,Y,Y)