2

这个网站上已经有很多类似的问题:

MATLAB,填充两组数据之间的区域,一个图中的线条

MATLAB填充线之间的区域

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

一个粗略的例子是:

% 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 条曲线需要类似的东西。

4

2 回答 2

2

如果我理解正确,您可以通过创建要遮蔽的区域的minmax向量来做到这一点,并使用flipudfill

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

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

在此处输入图像描述

于 2017-02-23T09:04:10.173 回答
0

如果我理解正确:

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(:)])])

在此处输入图像描述

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

于 2017-02-23T00:58:21.647 回答