4次元データを添付画​像のように3次元プロ​ットとカラーマップを​使って可視化したいで​す。

조회 수: 23 (최근 30일)
Mig
Mig 2023년 1월 17일
댓글: Mig 2023년 1월 18일
以下の画像のように3次元プロットをカラーマップを用いて表示したいです。
添付ファイル(sample.txt)の1列目をx軸、2列目をy軸、3列目をz軸とした3次元プロットを作成し、同じ行の4列目のデータをカラーマップで表したいです。また、カラーマップは画像のように[-1.0:1.0]とし、-1で青、0で白、1で赤となるようなグラデーションにしたいです。
下記のコードで、カラーマップ表示までは出来たのですが、色を変更する方法が調べても分かりませんでした。教えていただけますと幸いです。
追記
追加で質問失礼致します。
sampleのようなデータセットが複数あり、それを上記画像のように一つのグラフで表示したい場合のやり方も教えていただけますと幸いです。hold onで重ねて表示は出来るのですが、同一のカラーマップで表示する方法が分かりません。よろしくお願い致します。
scatter3(sample.x,sample.y,sample.z,1,sample.A,'filled')

답변 (1개)

Atsushi Ueno
Atsushi Ueno 2023년 1월 18일
편집: Atsushi Ueno 2023년 1월 18일
  • scatter3(X,Y,Z,S,C)の構文を使えば、5番目の引数Cにsample.Aの値を入力出来ます
  • 事前定義されたカラーマップに希望の色配置が無い為、カラーマップの作成が悩みどころです
  • 真っ赤(rgb=[1,0,0])は0.5、真っ青(rgb=[0,0,1])は-0.5、0は真っ白(rgb=[1,1,1])と思われます
  • ±1は真っ黒(rgb=[0,0,0])ではありません。適当な勾配を与え希望の色配置に近づけました
  • カラーマップの値域(-1~1)に対しsample.txtにおけるsample.Aの値域は-0.3~0.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)の再現
up = (0:63)'/63; % 勾配+1 の直線(0⇒1)(長さ64)
dn = flipud(up); % 勾配-1 の直線(1⇒0)(長さ64)
on = ones(64,1); % 勾配 0 の直線(ずっと1)(長さ64)
zr = on * 0; % 勾配 0 の直線(ずっと0)(長さ64)
u2 = ((0:63)'+37)/100; % 勾配+1位の直線(0.37⇒1)(長さ64)
d2 = flipud(u2); % 勾配-1位の直線(1⇒0.37)(長さ64)
scatter3(sample.x,sample.y,sample.z,20,sample.A,'filled');
colormap([[zr; up; on; d2] [zr; up; dn; zr] [u2; on; dn; zr]]); % [r g b]の順に長さ256のグラデーションを作成
caxis([-1 1]); % カラーマップの範囲を設定
colorbar; % カラーバーを表示
  댓글 수: 1
Mig
Mig 2023년 1월 18일
コードをそのまま利用させていただきました。希望通りのカラーマップになりました。本当にありがとうございます。

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

카테고리

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

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!