2,575 ビュー (過去 30 日間)
Michiel 2015 年 2 月 28 日
コメント済み: William Rose 2024 年 4 月 17 日 20:00
I want to shade the area between these graphs
but this certainly does not do the trick:
fill([t t(end:-1:1)],[y1 y2(end:-1:1)],'y')
but that did not seem to amend the outcome so far
##### 2 件のコメントなしを表示なしを非表示
Huijian Huang 2017 年 12 月 15 日
have you solve this problem at the end? I am also struggling with similar situation
Image Analyst 2017 年 12 月 15 日
Yes, there were answers below, one of which he accepted though both should work.

サインインしてコメントする。

### 採用された回答

Image Analyst 2015 年 2 月 28 日
Try using fill() instead of area():
x = 1 : 300;
curve1 = log(x);
curve2 = 2*log(x);
plot(x, curve1, 'r', 'LineWidth', 2);
hold on;
plot(x, curve2, 'b', 'LineWidth', 2);
x2 = [x, fliplr(x)];
inBetween = [curve1, fliplr(curve2)];
fill(x2, inBetween, 'g');
##### 13 件のコメント11 件の古いコメントを表示11 件の古いコメントを非表示
Jason Thomas 2024 年 2 月 29 日
Hoping this post from 9 years ago is still monitored.
I tried the suggestion above, but instead of filling the area green, it just added thin black lines at the upper and lower bounds. What am I missing?
plot(averageFF2W5I(:,2),averageFF2W5I(:,1), 'k', 'LineWidth', 2);
plot(averageFF2W5I(:,2),averageFF2W5I(:,[8 9]), 'k--', 'LineWidth', 2);
fill([averageFF2W5I(:,2), fliplr(averageFF2W5I(:,2))], [averageFF2W5I(:,8), fliplr(averageFF2W5I(:,9))], 'g');
averageFF2W5I(:,2) = Strain Values
averageFF2W5I(:,1) = Stress Sample Mean
averageFF2W5I(:,[8 9]) = 95% Confidence Interval
William Rose 2024 年 4 月 17 日 20:00
I don't have your array, so I will use analogous data.
x=0:20; y=x.^.5; ci1=0.8*y; ci2=1.2*y;
fill([x, fliplr(x)], [ci1, fliplr(ci2)], 'g', EdgeColor='none');
hold on
plot(x,y, 'k', 'LineWidth', 2)
plot(x,[ci1;ci2], 'k--', 'LineWidth', 2)
I moved fill() before plot(), so that the line in the middle would not get covered by the fill. Alternatively, you could specify a semitransparent fill. I specified no edge for the fill. I added hold on after fill().

サインインしてコメントする。

### その他の回答 (3 件)

Star Strider 2015 年 2 月 28 日

Try this:
x = linspace(0,10*pi);
y1 = sin(x);
y2 = cos(x);
figure(1)
plot(x, y1)
hold on
plot(x, y2)
patch([x fliplr(x)], [y1 fliplr(y2)], 'g')
hold off
Experiment with your data to get the result you want.
##### 10 件のコメント8 件の古いコメントを表示8 件の古いコメントを非表示
Jason Thomas 2024 年 2 月 29 日
@Star Strider THANK YOU!
There were several NaN values in the confidence interval. Once I removed those with rmmissing and used your code with "flip" instead of "fliplr" it worked perfectly.
Star Strider 2024 年 2 月 29 日
My pleasure!
A Vote would be appreciated!

サインインしてコメントする。

Javier Montalt Tordera 2019 年 4 月 12 日
This can be simplified using the function shade (in MATLAB File Exchange).
The syntax for the above problem would be:
The FillType option specifies that the area between lines 1 and 2 should be filled, whether 1 is above 2 or the other way round.
##### 5 件のコメント3 件の古いコメントを表示3 件の古いコメントを非表示
Image Analyst 2022 年 5 月 19 日
@Giacomo Giuliani, yes though to not cover the line plots you might plot (or re-plot) the line plots after you've plotted the patches between the curves.
Giacomo Giuliani 2022 年 5 月 19 日

It came to my minds one second after I posted. It works! Thanks.

サインインしてコメントする。

Adam Danz 2024 年 1 月 29 日
Another solution that may be helpful is the fillBetweenAreaCurve function offered by the MATLAB Charting team on the File Exchange.
##### 1 件のコメント-1 件の古いコメントを表示-1 件の古いコメントを非表示
Les Beckham 2024 年 2 月 29 日
FYI - it appears that this File Exchange utility requires the Mapping Toolbox.

サインインしてコメントする。

### カテゴリ

Help Center および File ExchangeGraphics Object Programming についてさらに検索

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by