plot間を色付けしたい
12 views (last 30 days)
Show older comments
こんにちは。
以下画像の赤い2直線の間を色付けしたいのですが、上手くいきません。
添付のmatファイルに対し、以下のコードを実行すると最後の添付画像のようなエラーが発生してしまいます。
良い方法をご存知のかたがいらっしゃいましたら、教えていただけますと嬉しいです。
よろしくお願い致します。
bottom = sample(1:100,1);
height = sample(1:100,2);
top = sample(1:100,3);
clf
close all hidden
x = 0:500;
figure
scatter(bottom,height,10,'DisplayName','Height')
xlim([0 500])
hold on
r1 = plot(x-100,'r','DisplayName','Top');
r2 = plot(x-260,'r','DisplayName','Bottom');
x2 = [x, fliplr(x)];
inBetween = [r1, fliplr(r2)];
fill(x2, inBetween, 'g');
patch([x fliplr(x)], [r1 fliplr(r2)], 'r')
hold off
grid on
legend('Location','eastoutside')
xlabel('Depth [m]')
ylabel('Height [m]')
ylim([0 500])
1 Comment
Atsushi Ueno
on 17 Nov 2021
Edited: Atsushi Ueno
on 17 Nov 2021
コメントその1
上記リンク先を参考になさったのだと思います。この例は下図の様に、対象グラフの右側に左右反転したグラフをくっ付けて塗りつぶしたのです。その理由は、塗りつぶす対象図形を「閉じた図形」にする為です。一方さんのグラフは左右反転したグラフを右側にくっ付けても「閉じた図形」にはなりません。←誤った認識でした。fill関数が自動的に閉じた図形と認識してくれます。「必要に応じて、関数 fill は、最後の頂点を最初の頂点に接続して多角形を閉じます。」とfill関数の説明に明記されています。
←誤った認識でした。グラフ描画された範囲も左半分だけです。
コメントその2
プロット関数の戻り値は当該プロットのx 値やy 値だけでなく様々なプロパティを持ったLine オブジェクトです。オブジェクトの名前を書いてもx,yデータを参照している事にはなりません。
test = plot(0:100,0:100);
test
Accepted Answer
Atsushi Ueno
on 17 Nov 2021
Edited: Atsushi Ueno
on 17 Nov 2021
コメントを踏まえて、一部を修正しました。
コメントに私の誤った認識がありました。コメントの方を訂正致します
load sample.mat
bottom = sample(1:100,1);
height = sample(1:100,2);
top = sample(1:100,3);
clf
close all hidden
x = 0:500;
figure;
r1 = plot(x-100,'r','DisplayName','Top');
hold on;
r2 = plot(x-260,'r','DisplayName','Bottom');
x2 = [x, fliplr(x)];
inBetween = [r1.YData, fliplr(r2.YData)]; % ←ここを直しました
fill(x2, inBetween, 'g');
% patch(x2, inBetween, 'r'); % ←fill関数もpatch関数も結果は同じです
scatter(bottom,height,10,'blue','DisplayName','Height');
xlim([0 500]);
hold off
grid on
legend('Location','eastoutside')
xlabel('Depth [m]')
ylabel('Height [m]')
ylim([0 500])
2 Comments
More Answers (0)
See Also
Categories
Find more on 離散データ プロット in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!