plot間を色付けしたい
12 ビュー (過去 30 日間)
古いコメントを表示
こんにちは。
以下画像の赤い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 件のコメント
Atsushi Ueno
2021 年 11 月 17 日
編集済み: Atsushi Ueno
2021 年 11 月 17 日
コメントその1
上記リンク先を参考になさったのだと思います。この例は下図の様に、対象グラフの右側に左右反転したグラフをくっ付けて塗りつぶしたのです。その理由は、塗りつぶす対象図形を「閉じた図形」にする為です。一方さんのグラフは左右反転したグラフを右側にくっ付けても「閉じた図形」にはなりません。←誤った認識でした。fill関数が自動的に閉じた図形と認識してくれます。「必要に応じて、関数 fill は、最後の頂点を最初の頂点に接続して多角形を閉じます。」とfill関数の説明に明記されています。
←誤った認識でした。グラフ描画された範囲も左半分だけです。
コメントその2
プロット関数の戻り値は当該プロットのx 値やy 値だけでなく様々なプロパティを持ったLine オブジェクトです。オブジェクトの名前を書いてもx,yデータを参照している事にはなりません。
test = plot(0:100,0:100);
test
採用された回答
Atsushi Ueno
2021 年 11 月 17 日
編集済み: Atsushi Ueno
2021 年 11 月 17 日
コメントを踏まえて、一部を修正しました。
コメントに私の誤った認識がありました。コメントの方を訂正致します
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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 離散データ プロット についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!