plot間を色付けしたい

19 visualizaciones (últimos 30 días)
Yu
Yu el 17 de Nov. de 2021
Comentada: Yu el 18 de Nov. de 2021
こんにちは。
以下画像の赤い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 comentario
Atsushi Ueno
Atsushi Ueno el 17 de Nov. de 2021
Editada: Atsushi Ueno el 17 de Nov. de 2021
コメントその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

Iniciar sesión para comentar.

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 17 de Nov. de 2021
Editada: Atsushi Ueno el 17 de Nov. de 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 comentarios
Atsushi Ueno
Atsushi Ueno el 17 de Nov. de 2021
scatter関数を先に実行すると塗りつぶしによって上書きされてしまうので、scatter関数ををfill関数の後ろに移動しました
Yu
Yu el 18 de Nov. de 2021
ありがとうございます!!コメント2を読んで納得しました。
おかげさまで希望する図が描けました。
いつも教えてくださりありがとうございます。

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!