【グラフの作成】Y軸の値からX軸の値を作成する

MATLABアプリを作成しています。
グラフを作成するアプリを検討しているのですが、
Y軸の値となる部分から、X軸の値を作成したいと考えています。
具体的には、
下記のようなデータがあるとします。
data = [0 1 2 3 4 5] ←これがY軸の値になるとします。
find関数などで、例えば上記のデータ内の2を見つけた場合、
そこを0とするようなX軸の値を作成したいです。
data2=[-2 -4 0 2 4]のような感じ(幅2で作成する場合)
その後、上記のX,Yの値を使用したグラフを作成したいと考えています。
plot(data2,data) で作成。
上記、下線部のようなことは可能でしょうか。

 Accepted Answer

Atsushi Ueno
Atsushi Ueno on 13 Jan 2022
質問の文脈通りに解釈すれば下記のようになります
n = 2; % 探す値
data = [0 1 2 3 4 5];
idx = find(data == n) - 1; % 探す値が含まれるインデックス(0始まり)
data2 = (0:2:10) - idx*2; % 見つかったインデックスに応じてx軸を移動する
plot(data2,data);

5 Comments

RK
RK on 14 Jan 2022
ありがとうございます。
理解いただいた内容で相違ございません。
上記を参考にコードを作成したところ、下記のエラーが発生します。
エラー: plot ベクトルは同じ長さでなければなりません。
具体的に行っているのは下記の通りです。(アプリとして作成中です。)
% ボタンを押す
[file,path]=uigetfile('*.csv;*.xlsx;*.xls');
[app.data]=readmatrix(fullfile(path,file));
n = app.Spinner.Value; % 探す値
idx = find(app.data(:, app.Spinner2.Value) == n)-1; % 読み込んだデータの指定行の中から値を探す
datax = (0:2:10) -idx*2;
y =app.data(:,app.Spinner2.Value);
plot(app.UIAxes,datax,y);
ご確認の程よろしくお願い申し上げます。
Atsushi Ueno
Atsushi Ueno on 14 Jan 2022
dataxとyのサイズを合致させる必要があります。
なので例えばdatax = 1:numel(app.data(:, app.Spinner2.Value)) - idx;
のような形にすればdataxとyのサイズを合致させる事が出来ます。
また、idxに2を掛けたのは質問の例に合わせる為なので、実際の目的に合わせて変更する必要があります。
RK
RK on 14 Jan 2022
ありがとうございます。
上記について確認いたします。
取り急ぎ教えていただきたいのですが、
idxに2をかけたのは、幅2で作成する場合としたためでしょうか。
よろしくお願いいたします。
>idxに2をかけたのは、幅2で作成する場合としたためでしょうか。
そうです。
質問中に挙がった例をカバーする為だけのマジックナンバーを含むプログラムなので具合が良くないですね。
汎用的にするには、x軸のスケールとオフセットを変数にします。以下の様にすれば良いと思います。
scale = 2; % 幅
offset = idx * scale; % オフセット量
array = 1:numel(app.data(:, app.Spinner2.Value)); % y軸と同じサイズのベクトル
datax = array * scale - offset;
RK
RK on 14 Jan 2022
ありがとうございます。
上記、納得しました。
ご丁寧に対応いただきありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2021a

Asked:

RK
on 13 Jan 2022

Commented:

RK
on 14 Jan 2022

Community Treasure Hunt

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

Start Hunting!