配列の3次元プロット

조회 수: 13 (최근 30일)
kou sasai
kou sasai 2021년 6월 24일
댓글: Hernia Baby 2021년 6월 25일
配列 a(48,48,72)に入っているデータを3次元x,y,z 軸上にプロットしたい。
中心(0,0,0),-24<=x<=24,-24<=y<=24,-36<=z<=36,としてa(1,1,1)に収納されている数値に対応したプロットを(x,y,z)=(-24,-24,-36)にプロットしたい。収納されている数値の大きさによってカラーリングも行いたい。
得られるプロットのイメージは図のような感じです。(これがカラーリングされている)
  댓글 수: 2
Atsushi Ueno
Atsushi Ueno 2021년 6월 24일
上記ギャラリーの中ではScatter Plot 3Dかなと思いました。
kou sasai
kou sasai 2021년 6월 24일
ありがとうございます。試してみます。

댓글을 달려면 로그인하십시오.

채택된 답변

Hernia Baby
Hernia Baby 2021년 6월 24일
概要
scatter3で大丈夫ですが、もう一工夫いります。
おそらくそのままやると上手く図示できないか、直線になるのではないでしょうか?
meshgridで立体的なプロットが可能となります。
せっかくなのでお遊びで四角い枠も作ってみましょう。
四角い枠を作る
patchで立方体を作ります。詳しい作り方はこちら
clear,clc,close all;
vert = [0 0 0;1 0 0;1 1 0;0 1 0;0 0 1;1 0 1;1 1 1;0 1 1];
vert(vert==1)=40;
vert(vert==0)=-40;
fac = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
'FaceVertexCData',hsv(6),'FaceColor','r','FaceAlpha',.01)
view(3)
axis vis3d
hold on
配列の3次元プロット
今回は刻み幅1の点とします。色は適当です。まずは座標。
x = -24:24;
y = -24:24;
z = -36:36;
このまま描画すると直線になります。
ここで立体にするためにmeshgridを使います。
[X,Y,Z] = meshgrid(x,y,z);
最後にサイズと色を指定して、軸も消して完成です。
s = 1;
M = abs(cos(2*pi*X(:)/48)+sin(2*pi*Y(:)/48)+sin(2*pi*Z(:)/72));
scatter3(X(:),Y(:),Z(:),s,M);
ax = gca;
ax.XAxis.Visible ='off';
ax.YAxis.Visible ='off';
ax.ZAxis.Visible ='off';
  댓글 수: 1
Hernia Baby
Hernia Baby 2021년 6월 25일
補足)もしaのなかに座標情報48×48×72行分が入っている場合はmeshgridは必要ありません。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Annotations에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!