MATLAB Answers

X軸のサンプリングが​異なるXYZデータを​カラーマップ表示する​方法

6 views (last 30 days)
mushi77
mushi77 on 10 Sep 2021
Commented: Hernia Baby on 14 Sep 2021
1×mの配列データXおよびYがあり、Xが座標、YがそのX座標に対応するある測定データです
このデータがZ軸方向にある間隔でn個存在するのですが、各Z座標に対応するX座標データのサンプリングとデータレンジがまちまちです。
このデータをXZ平面でYの値に対応するカラーマップとして表示したいのですがどうしたら良いでしょうか。
一通りのToolboxは使用可能です。

Answers (1)

Hernia Baby
Hernia Baby on 11 Sep 2021
z軸に相当するデータを n とします
n = 0:10:50;
ここでは x, yのデータを A という cell型配列に格納します
cell型にしないとサイズが違うので怒られます
データ自体は既知だと思うので、最後の2行のように格納するんだって思っていただければいいです
for i = 1:length(n)
m = n(i) + 50;
x_i = randi(m);
x_f = 200 + m;
x = transpose(x_i:x_f);
y = sin(2*(pi*x - 2*n(i))/200);
A{i,1} = x; % ← 実際はここだけ使う
A{i,2} = y; % ← 実際はここだけ使う
end
Aの中身を見てみましょうか
A
A = 6×2 cell array
{210×1 double} {210×1 double} {219×1 double} {219×1 double} {236×1 double} {236×1 double} {266×1 double} {266×1 double} {247×1 double} {247×1 double} {211×1 double} {211×1 double}
ここで x の最小最大を求めます
そして5ステップ刻みの x_q を作成します
xi_min = min(cellfun(@(x) x(1,1), A(:,1)));
xf_max = max(cellfun(@(x) x(end,1), A(:,1)));
x_q = xi_min:5:xf_max;
interp1 でデータサイズや刻み幅を合わせます
B = cellfun(@(x,y) interp1(x,y,x_q), A(:,1),A(:,2),'UniformOutput',false);
図示します
B = cell2mat(B);
[X, Z] = meshgrid(x_q,n);
surf(X,Z,B)
view(2);
xlabel('X軸'), ylabel('Z軸');
  2 Comments
Hernia Baby
Hernia Baby on 14 Sep 2021
カラーコンターを出すためにinterp1で補間しています。
interp1での補間なしですと、以下の手順が想定されます。
① 最も小さい分解能(Δx)に刻む
  このときΔnは他の分解能に対してk×Δxである必要がある
② この刻み幅に対してXの最小最大のサイズにNaNを作成する
③ xのどこかには必ず対応するyがはいるのでindex型でyをNaNに当てはめていく
④ X_i~X_i+1まで(k-1)×Δx分だけNaNが残っているので、それをYiで埋める
⑤ これをZ分繰り返す
⓺ meshgridでメッシュを切る
⑦ コンター作成

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!