如何在Matlab图中对水平线和曲线之间的区域进行着色

use*_*817 3 matlab plot area fill matlab-figure

我试图将区域遮挡在恒定的水平线上方.水平线上方代表前10%的数据(即,我的数据的90%低于水平线).我使用函数(曲线相交)来查找水平线与数据相交的起点和终点.但是,我无法弄清楚如何绘制水平线以上的区域,受曲线约束.有谁知道如何在Matlab中做到这一点?附图中提供了我的尝试的一个例子.谢谢!

图1:黑线是我的水平常数线.红色圆圈代表'curveintersect'的起点和终点.我试图绘制数据以填充红线,但它捕获的数据低于10%线.

黑线是我的水平常数线. 红色圆圈代表'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
Run Code Online (Sandbox Code Playgroud)

我重复了3个子图的区域函数,每个子图具有相同的代码,只是不同的变量:

area(x, max(y, min(x)), min(x), 'EdgeColor','none','FaceColor', [.7 .7 .7]); alpha(.3);
Run Code Online (Sandbox Code Playgroud)

第一个子图(橙色点画线)不是绘图,而是第二个和第三个子图.

在此输入图像描述

Lui*_*ndo 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])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述