
在科研中,不管是实验数据还是做模拟预测,往往都需要给出数据的置信区间、误差限等值,在画图时需给出误差带。此时,就需要用到填充图,在MATLAB中,可以用area函数实现。
1 area函数的基本用法
area(Y)
area(X,Y)
area(...,basevalue)
area(...,Name,Value)
area(ax,...)
ar = area(...)
区域图将 Y 中的元素显示为一个或多个曲线并填充每个曲线下方的区域。如果 Y 为矩阵,则曲线堆叠在一起,显示每行元素占每个 x 区间的曲线总高度的相对量。
area(Y) 绘制向量 Y 或将矩阵 Y 中每一列作为单独曲线绘制并堆叠显示。x 轴自动缩放到 1:size(Y,1)。Y 中的值可以是数值或持续时间值。
area(X,Y) 绘制 Y 对 X 的图,并填充 0 和 Y 之间的区域。X 的值可以是数值、日期时间、持续时间或分类值。
如果 Y 是向量,则将 X 指定为由递增值组成的向量,其长度等于 Y。如果 X 的值不增加,则 area 将在绘制之前对值进行排序。
如果 Y 是矩阵,则将 X 指定为由递增值组成的向量,其长度等于 Y 的行数。area 将 Y 的列绘制为填充区域。对于每个 X,最终结果是 Y 行的相应值的和。您还可以将 X 指定为大小等于 Y 的矩阵。为了避免 X 为矩阵时出现意外输出,请将 X 的列指定为重复列。
area(...,basevalue) 指定区域填充的基值。默认 basevalue 为 0。将基值指定为数值。
area(...,Name,Value) 使用一个或多个名称-值对组参数修改区域图。
area(ax,...) 将图形绘制到 ax 坐标区中,而不是当前坐标区 (gca) 中。
ar = area(...) 返回一个或多个 Area 对象。area 函数将为向量输入参数创建一个 Area 对象。它会为矩阵输入参数的每一列创建一个对象。
创建 m×n 矩阵的区域图会创建 n 个区域序列对象(即每列一个),而 1×n 向量创建一个区域序列对象。 [1]
1.1 示例1
clc
clear all
close all
x = [0:0.01:pi];
y(:,1) = sin(x);
y(:,2) = abs(cos(x));
subplot(1,2,1)
area(y)
xlim([0,314])
subplot(1,2,2)
area(y,-4)
xlim([0,314])

这里我们考虑的是 sin(x) 和 |cos(x)| 两个函数。
area函数的默认基准面是x轴,如上左图所示。要想指定特殊基准面,直接在命宁area(y, basevalue)中,指定basevalue的值即可。这里指定值为-4,如上右图所示。
第一个颜色是sin(x)函数与x轴围成的,第二个颜色是在sin(x)函数基本上,叠加|cos(x)|函数围成的,此时最上面的线相当于sin(x) + |cos(x)|。
又一示例如下。
clc
clear all
close all
x = [0:0.01:pi];
y(:,1) = sin(x);
y(:,2) = (cos(x));
area(y)
xlim([0,314])

可以看出,第二个颜色是两个函数之间的填充。
1.2 示例2
area函数x轴是默认的,但是我们也可以指定其他值,可以是数值、日期时间、持续时间或分类值等等。
上图x值已经了,例如日期。
clc
clear all
close all
t = datetime(2021,1,15) + calweeks(0:20);
x = [0:pi/20:pi];
y(:,1) = sin(x);
y(:,2) = abs(cos(x));
subplot(1,2,1)
area(t,y)
subplot(1,2,2)
area(t,y,-4)

此时,横轴坐标就是日期了。关于时间用法可以参考帮助文档。[2]
1.3 示例3
area函数默认线型是实线,可以采用 'LineStyle' 命宁直接进行更改。
clc
clear all
close all
x = [0:0.01:pi];
y(:,1) = sin(x);
y(:,2) = abs(cos(x));
subplot(1,2,1)
area(x,y,-0.5)
xlim([0,pi])
subplot(1,2,2)
area(x,y,-0.5,'linestyle','--')
xlim([0,pi])

这里第一个图是默认,第二个图更改为虚线。
1.4 示例四
进一步地,可以更改填充颜色,采用句柄命宁。
如下所示。
clc
clear all
close all
x = [0:0.01:pi];
y(:,1) = sin(x);
y(:,2) = abs(cos(x));
subplot(1,2,1)
h = area(x,y,-0.5,'linestyle','none');
h(1).FaceColor = [0.3 0.8 0.8];
h(2).FaceColor = [0.6 0.2 0.6];
xlim([0,pi])
subplot(1,2,2)
h = area(x,y,-0.5,'linestyle','none');
h(1).FaceColor = [1 1 1];
h(2).FaceColor = [0.6 0.2 0.6];
xlim([0,pi])

左边我们更改了填充区的颜色。但是科研中,有时候,我们只需要两条线之间填充,第一条线与基底无填充,则使第一填充颜色为白色([1, 1, 1])即可。
2 应用示例
填充图应用非常广泛。
这里给出一篇JFM(流体力学顶刊)的文章截图[3]

也是用MATLAB画的。
持续更新,更多文章请见目录
MATLAB画图技巧与实例:目录
Alien:MATLAB画图技巧与实例:目录zhuanlan.zhihu.com
MATLAB画图技巧与实例(一):常用函数
Alien:MATLAB画图技巧与实例(一):常用函数zhuanlan.zhihu.com
参考
- ^https://ww2.mathworks.cn/help/matlab/ref/area.html
- ^https://ww2.mathworks.cn/help/matlab/matlab_prog/plot-dates-and-durations.html
- ^https://arxiv.org/abs/2007.06228