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
mushi77
mushi77 on 13 Sep 2021
自分の保有データに照らし合わせて確認するのに時間がかかり返答が遅くなりました。
おおよそ狙いのかたちではあるものの、この方法はinterp1を使用することで、統一のx軸(x_q)にあわせて実データを補完して表示する方法という理解であっていますでしょうか。
元のデータの刻みはそのデータの分解能や信頼につながるため、できれば平均化や線形補間といった演算のないかたちにしたいです。
そのためx軸の刻みが各データごとで違うままXYプロットすることはできないでしょうか。
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.

Products

Community Treasure Hunt

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

Start Hunting!