Matlab/Octave 中折线和水平线之间的填充区域

Fill area between a polyline and a horizontal line in Matlab/Octave

我正在尝试使用 Octave/Matlab 填充折线和水平线(将这条折线切割成几个点)之间的区域,但我只想保留水平线以下的区域。

这就是我到目前为止的想法:

x = 0:0.5:6;
y = [3 2.5 1 1 1 2.5 3 2.5 1 1 1 2.5 3];
yline(1:13) = 2;

figure(1)
plot(x,y,'k')

fill([x fliplr(x)],[y yline],'g')
axis equal
xlim([-1 7]);

我搜索了好几天才找到解决方案,但我只接近答案 here, here and here(不幸的是,最后一个仅适用于 r 代码)。

您可以使用以下技巧:

  1. 正常填写,就像您在代码中所做的那样。无需为边缘着色;稍后再做。
  2. 画一个白色的矩形patch来遮住你不想填充的部分。这里也没有边缘颜色。
  3. 在上面绘制线条。

代码:

x = 0:0.5:6;
y = [3 2.5 1 1 1 2.5 3 2.5 1 1 1 2.5 3];
yline(1:13) = 2;

figure(1)

fill([x fliplr(x)],[y yline],'g', 'edgecolor', 'none')
hold on
patch([min(x) max(x) max(x) min(x)],[yline(1) yline(1) max(y) max(y)], 'w', ...
    'edgecolor', 'none')
plot(x,y,'k')
plot(x,yline,'k')
axis equal
xlim([-1 7]);

结果图: