多条曲线之间的 MATLAB 阴影区域

MATLAB Shading region between SEVERAL curves

此网站上已有很多类似问题:

MATLAB, Filling in the area between two sets of data, lines in one figure

MATLAB fill area between lines

但是,所有现有问题仅与两条曲线有关。如何填充由 多条 条相互重叠的曲线界定的区域?

一个粗略的例子是:

% Create sample data as column vectors.
x = [1 : 100]';
curve1 = x/10;
curve2 = log(x/2) + rand(length(x), 1) - 0.5;
curve3 = log(x) + rand(length(x), 1) + 0.5;
% Plot it.
plot(x, curve1, 'r', 'LineWidth', 2);
hold on;
plot(x, curve2, 'b', 'LineWidth', 2);
plot(x, curve3, 'k', 'LineWidth', 2);

对于阴影: 上限将是黑色曲线后接红线。

下限是蓝色曲线(简要地),然后是红线,然后是蓝色曲线。

在我的实际数据集中,我有 10 条曲线需要类似的东西。

如果我理解正确的话:

basevalue = min([curve1(:) ; curve2(:) ; curve3(:)]);
h = area([curve2 , curve1-curve2 , curve3-curve1],basevalue)
h(1).FaceColor = [1 1 1]; 
h(2).FaceColor = [0 0.5 0.5];  
h(3).FaceColor = [1 1 1];   
hold on
plot(x, curve1, 'r', 'LineWidth', 2);
plot(x, curve2, 'b', 'LineWidth', 2);
plot(x, curve3, 'k', 'LineWidth', 2);
ylim([ min([curve1(:) ; curve2(:) ; curve3(:)]);  max([curve1(:) ; curve2(:) ; curve3(:)])])

所以你需要以一种与你想要的一致的方式来玩区域...

如果我没理解错的话,您可以通过创建一个 minmax 您想要遮蔽的区域的向量,然后使用 flipud 来遮蔽该区域fill

min_data=min([curve1,curve2,curve3],[],2);
max_data=max([curve1,curve2,curve3],[],2);

fill([x;flipud(x)],[min_data;flipud(max_data)],'g')