2017-02-22 21 views
2
すでに似た何かのためにこのサイト上の多くの質問があります

MATLABシェーディング領域は

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

MATLAB fill area between lines

しかし、既存のすべての質問には、2つのだけのカーブに関連しています。 で区切られた領域をいくつか塗りつぶしますか?お互いに重なっているカーブ?

粗製の例は次のようになります。シェーディング

% 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個の曲線があります。

答えて

1

私はあなたを理解していれば正しく、あなたが日陰にしたいエリアの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') 

enter image description here

+0

ありがとう!まさに私が探していたもの。 – luks

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

enter image description here

をだからあなたはあなたが望むものと一致している方法で、面積でプレーする必要があります...

+0

ない、非常に!赤い線の下の領域とプロットの右側の黒い曲線も網掛けする必要があります。プロットの '左側'の側では、黒い曲線の下の領域と赤い線の上の領域も網掛けする必要があります。 – luks

+0

ですが、それは網掛けされている領域です(赤い線の下と右の黒の曲線)。あなたのコメントは明確ではありません。陰影をつけたい領域で質問を更新してください(MS塗料などで行います)。また、答えはそれのバリエーションになるので、私がしたことを理解しようとすると、 – bla

関連する問題