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

37 views (last 30 days)
Mig
Mig on 17 Jan 2023
Commented: Mig on 18 Jan 2023
以下の画像のように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')

Answers (1)

Atsushi Ueno
Atsushi Ueno on 18 Jan 2023
Edited: Atsushi Ueno on 18 Jan 2023
  • 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 Comment
Mig
Mig on 18 Jan 2023
コードをそのまま利用させていただきました。希望通りのカラーマップになりました。本当にありがとうございます。

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!