カラーマップの前面に直線を表示したいです
16 ビュー (過去 30 日間)
古いコメントを表示
図のように、カラーマップと直線をプロットしようとしているのですが、この直線をカラーマップの前面に持ってくる方法が分からないので教えていただきたいです。
現在は次のような順番でプロットを作成しています。
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;
よろしくお願い致します。
0 件のコメント
回答 (2 件)
Atsushi Ueno
2023 年 2 月 9 日
上記リンク先ドキュメントのここ↓です。描画したオブジェクトのハンドルが順に格納されたデータを上下逆さにひっくり返して格納し直すと描画順序が逆転します。
%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 件のコメント
Atsushi Ueno
2023 年 2 月 9 日
以前の質問から引っ張って来て試してみましたが、あーこれなんか駄目ですね。
つまり、描画順序に関わらず「手前に描画された線を後ろの線で隠す事が出来ない」ですね。
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
2023 年 2 月 9 日
編集済み: Atsushi Ueno
2023 年 2 月 10 日
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;
参考
カテゴリ
Help Center および File Exchange で 多角形 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!