plot間を色付けしたい

12 ビュー (過去 30 日間)
Yu
Yu 2021 年 11 月 17 日
コメント済み: Yu 2021 年 11 月 18 日
こんにちは。
以下画像の赤い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')
      
Invalid text character. The text '      ' contains an unsupported non-ASCII whitespace character.
hold off
grid on
legend('Location','eastoutside')
xlabel('Depth [m]')
ylabel('Height [m]')
ylim([0 500])
  1 件のコメント
Atsushi Ueno
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
test =
Line with properties: Color: [0 0.4470 0.7410] LineStyle: '-' LineWidth: 0.5000 Marker: 'none' MarkerSize: 6 MarkerFaceColor: 'none' XData: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 … ] YData: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 … ] ZData: [1×0 double] Show all properties

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

採用された回答

Atsushi Ueno
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 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 11 月 17 日
scatter関数を先に実行すると塗りつぶしによって上書きされてしまうので、scatter関数ををfill関数の後ろに移動しました
Yu
Yu 2021 年 11 月 18 日
ありがとうございます!!コメント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!