カラーマップの前面に直線を表示したいです

16 views (last 30 days)
Mig
Mig on 9 Feb 2023
Commented: Atsushi Ueno on 10 Feb 2023
図のように、カラーマップと直線をプロットしようとしているのですが、この直線をカラーマップの前面に持ってくる方法が分からないので教えていただきたいです。
現在は次のような順番でプロットを作成しています。
figure(1);
%カラーマップのプロット
scatter3(a,b,c,1,d,'filled');
hold on;
colormap();
caxis();
view(2);
axis();
yticks();
axis square;
grid on;
xlabel();
ylabel();
%直線のプロット
x=;
y=;
plot(x,y,"black");
hold off;
よろしくお願い致します。

Answers (2)

Atsushi Ueno
Atsushi Ueno on 9 Feb 2023
上記リンク先ドキュメントのここ↓です。描画したオブジェクトのハンドルが順に格納されたデータを上下逆さにひっくり返して格納し直すと描画順序が逆転します。
%Returns handles to the patch and line objects
chi=get(gca, 'Children')
%Reverse the stacking order so that the patch overlays the line
set(gca, 'Children',flipud(chi))
  2 Comments
Atsushi Ueno
Atsushi Ueno on 9 Feb 2023
以前の質問から引っ張って来て試してみましたが、あーこれなんか駄目ですね。
つまり、描画順序に関わらず「手前に描画された線を後ろの線で隠す事が出来ない」ですね。
dat = readmatrix('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1266860/sample.txt');
sample = cell2struct(num2cell(dat, 1), {'x','y','z','A'}, 2); % データセット(sample)の再現
scatter3(sample.x,sample.y,sample.z,20,sample.A,'filled');
colormap('jet'); caxis([-1 1]); view(2);
hold on;
plot(-10:0.1:10,sin(4*(-10:0.1:10))*20,'LineWidth',3);
hold off;
chi=get(gca,'Children');
set(gca,'Children',flipud(chi)); % scatter3とplotの描画順序をひっくり返す
Atsushi Ueno
Atsushi Ueno on 10 Feb 2023
同じ事をする uistack 関数がありました。また先のコメントに書いた事を逆に利用するアイデア(2次元プロットにZ座標値を追加して前後関係を定義する方法)が提案されています。なるほど

Sign in to comment.


Atsushi Ueno
Atsushi Ueno on 9 Feb 2023
Edited: Atsushi Ueno on 10 Feb 2023
3 次元プロットを 2 次元表示にすると、Z座標値は不要になります。Z座標値を全部ゼロにすれば、追加の 2 次元プロットと同一平面上にプロットされます。奥行の前後関係が無くなるので、別回答の描画順序が反映される様になります。因みに今回は、カラーマップの後に描画された直線が前面に表示されます。
dat = readmatrix('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1266860/sample.txt');
sample = cell2struct(num2cell(dat, 1), {'x','y','z','A'}, 2); % データセット(sample)の再現
h = scatter3(sample.x,sample.y,sample.z,20,sample.A,'filled'); % 3 次元プロット
colormap('jet'); caxis([-1 1]); view(2); % 3 次元プロットを 2 次元表示
h.ZData = h.ZData * 0; % 3 次元プロットのZ座標データを全てゼロで上書き
hold on;
plot([-10 10],[-20 20],'LineWidth',5); % 追加の 2 次元プロット
hold off;
  1 Comment
Mig
Mig on 10 Feb 2023
Moved: Atsushi Ueno on 10 Feb 2023
こちらの方法で希望通りのプロットが作成できました!3次元プロットしていたのが問題だったのですね、ありがとうございます!

Sign in to comment.

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!