#author("2019-06-13T22:32:06+09:00","default:Miyashita","Miyashita")
#author("2019-07-01T12:10:52+09:00","default:Miyashita","Miyashita")
*線と線の間の塗りつぶし [#ve681002]
**こんな図をつくりたい [#r943e643]
2本の直線または曲線を基準に,その間の部分を着色したいときに.~
完成図として期待されるのは次のようなやつ.~
#ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/areasample.jpg,445x351)
なおこの図のデータはサンプルであり,特に意味を持つものではない.

**方法 [#f2273642]
適当にデータをつくっておく.

// MATLAB code
#codeprettify(lang-matlab){{
% Sample data
x = 0.0:0.01:10.0;
x = x';
y1 = -0.75*x+8.0;
y2 = -0.20*x+4.0;
}}


塗りつぶすには area を使う.
// MATLAB code
#codeprettify(lang-matlab){{

figure
ar = area(x,[y1 y2-y1]);

% Appearances
set(ar(1),'FaceColor','None')
set(ar(2),'FaceColor',[0.0,0.2,1.0],'FaceAlpha',0.2);
grid on
}}
//
ここで,
// MATLAB code
#codeprettify(lang-matlab){{
area(x,[y1 y2])
}}
のようにすると,2本目の基準線がy1+y2(累積和)の値になってしまうので,
のようにすると,2本目の基準線が y1+y2 (累積和)の値になってしまうので,
#codeprettify(lang-matlab){{
area(x,[y1 y2-y1])
}}
のように記述する必要がある.詳しくは[[ area/MathWorks >https://jp.mathworks.com/help/matlab/ref/area.html]]参照.~
ar(1).FaceColorをNoneにしないと, ar(1).BaseValue (デフォルトは0)からy1までの範囲に色が付く.~
ar(2).FaceColorは目的の着色範囲を示す.色や透過度はお好みで.~
ar(1).FaceColor を None にしないと, ar(1).BaseValue (デフォルトは0)から y1 までの範囲に色が付く.~
ar(2).FaceColor は目的の着色範囲を示す.色や透過度はお好みで.~
上記を実行すると,下のような図になる.
#ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/area0.jpg,445x351)

この着色に中心線を引き,予測幅のように示す場合は
// MATLAB code
#codeprettify(lang-matlab){{
ymean = mean([y1 y2],2);

figure
h = plot(x,ymean); hold on
ar = area(x,[y1 y2-y1]);

% Appearances
set(h,'Color','r','LineWidth',1.0)
set(ar(1),'FaceColor','None','LineStyle','None')
set(ar(2),'FaceColor',[1.0,0.2,0.0],'FaceAlpha',0.2,'LineStyle','None');
grid on

% Legend
le = legend([h,ar(2)],{'Mean','Range'});
set(le,'FontName','Times','FontSize',14);
}}
#ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/MATLAB/area1.jpg,445x351)

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes