- 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位の為、表示色が薄くなっています
4次元データを添付画像のように3次元プロットとカラーマップを使って可視化したいです。
20 views (last 30 days)
Show older comments
以下の画像のように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')
0 Comments
Answers (1)
Atsushi Ueno
on 18 Jan 2023
Edited: Atsushi Ueno
on 18 Jan 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)の再現
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; % カラーバーを表示
See Also
Categories
Find more on Orange in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!