我试图将区域遮挡在恒定的水平线上方。水平线上方表示前10%的数据(即,我的数据的90%低于水平线)。我使用函数(curve intersect)来查找水平线与数据相交的起点和终点。但是,我无法弄清楚如何绘制水平线以上的区域,受曲线约束。有谁知道如何在Matlab中做到这一点?附图中提供了我的尝试的一个例子。谢谢!
图。 1:黑线是我的水平常数线。红色圆圈代表'curveintersect'的起点和终点。我试图绘制数据以填充红线,但它捕获的数据低于10%线。
图。 2。我也试图使用填充功能,但同样,我正在捕捉蓝色曲线之外的数据。
从这里采用与图2相关的示例代码(http://blogs.mathworks.com/graphics/2015/10/13/fill-between/):
mask = y2 > y1; %find where blue curve is greater than the horizontal 90th % line
fx = [x(mask), fliplr(x(mask))];
fy = [y1(mask), fliplr(y2(mask))];
hold on
fill_color = [.929 .694 .125];
fh = fill(fx,fy,fill_color);
hold off
我重复了3个子图的区域函数,每个子图具有相同的代码,只有不同的变量:
area(x, max(y, min(x)), min(x), 'EdgeColor','none','FaceColor', [.7 .7 .7]); alpha(.3);
第一个子图(橙色点画线)不是绘图,而是第二个和第三个子图。
答案 0 :(得分:7)
使用area
,如下所示:
x = 0:.01:4*pi; %// x data
y = sin(x); %// y data
level = 0.5; %// level
plot(x, y)
hold on
area(x, max(y, level), level, 'EdgeColor', 'none', 'FaceColor', [.7 .7 .7])