Fill the Interval Area Between Two Curves by MATLAB fill Function

Oct. 06, 2022

MATLAB的fill函数可以用于填充两个曲线之间的interval,比如填充$y=x-1$和$y=x+1$之间的interval:

这种方法在绘制置信区间的时候很常用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clc, clear, close all

xdata = linspace(0, 10, 10);
ydata1 = xdata + 1;
ydata2 = xdata - 1;

figure, axes
hold(gca, "on")
grid(gca, "on")
box(gca, "on")
plot(xdata, ydata1, LineWidth=1.5)
plot(xdata, ydata2, LineWidth=1.5)
fill([xdata, fliplr(xdata)], [ydata1, fliplr(ydata2)], ...
    'b', 'FaceAlpha', 0.2, 'EdgeColor', 'none')
legend("y=x+1", "y=x-1", "Location", "best")

image-20221006172812753

需要注意的是,其中的变量xdataydata1ydata2都是行向量,因此在绘图函数中使用了fliplr函数。如果是列向量,那么则需要使用flipud函数,并且中间需要使用分号;间隔,在实际使用的时候一定要注意这一点!

1
2
3
4
5
6
7
...
xdata = linspace(0, 10, 10)';
ydata1 = xdata + 1;
ydata2 = xdata - 1;
...
fill([xdata; flipud(xdata)], [ydata1; flipud(ydata2)], ...
    'b', 'FaceAlpha', 0.2, 'EdgeColor', 'none')

image-20221006173312755

两种方式的绘制效果是完全一致的。


Reference

[1] fill - MathWorks.