多条曲线之间的 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(:)])])
所以你需要以一种与你想要的一致的方式来玩区域...
如果我没理解错的话,您可以通过创建一个 min
和 max
您想要遮蔽的区域的向量,然后使用 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')
此网站上已有很多类似问题:
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(:)])])
所以你需要以一种与你想要的一致的方式来玩区域...
如果我没理解错的话,您可以通过创建一个 min
和 max
您想要遮蔽的区域的向量,然后使用 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')