Effacer les filtres
Effacer les filtres

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

14 vues (au cours des 30 derniers jours)
Mig
Mig le 9 Fév 2023
Commenté : Atsushi Ueno le 10 Fév 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;
よろしくお願い致します。

Réponses (2)

Atsushi Ueno
Atsushi Ueno le 9 Fév 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 commentaires
Atsushi Ueno
Atsushi Ueno le 9 Fév 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 le 10 Fév 2023
同じ事をする uistack 関数がありました。また先のコメントに書いた事を逆に利用するアイデア(2次元プロットにZ座標値を追加して前後関係を定義する方法)が提案されています。なるほど

Connectez-vous pour commenter.


Atsushi Ueno
Atsushi Ueno le 9 Fév 2023
Modifié(e) : Atsushi Ueno le 10 Fév 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 commentaire
Mig
Mig le 10 Fév 2023
Déplacé(e) : Atsushi Ueno le 10 Fév 2023
こちらの方法で希望通りのプロットが作成できました!3次元プロットしていたのが問題だったのですね、ありがとうございます!

Connectez-vous pour commenter.

Produits


Version

R2017b

Community Treasure Hunt

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

Start Hunting!