【グラフの作成】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) で作成。
上記、下線部のようなことは可能でしょうか。

 Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 13 Jan 2022

1 vote

質問の文脈通りに解釈すれば下記のようになります
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 commentaires

RK
RK le 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 le 14 Jan 2022
dataxとyのサイズを合致させる必要があります。
なので例えばdatax = 1:numel(app.data(:, app.Spinner2.Value)) - idx;
のような形にすればdataxとyのサイズを合致させる事が出来ます。
また、idxに2を掛けたのは質問の例に合わせる為なので、実際の目的に合わせて変更する必要があります。
RK
RK le 14 Jan 2022
ありがとうございます。
上記について確認いたします。
取り急ぎ教えていただきたいのですが、
idxに2をかけたのは、幅2で作成する場合としたためでしょうか。
よろしくお願いいたします。
Atsushi Ueno
Atsushi Ueno le 14 Jan 2022
>idxに2をかけたのは、幅2で作成する場合としたためでしょうか。
そうです。
質問中に挙がった例をカバーする為だけのマジックナンバーを含むプログラムなので具合が良くないですね。
汎用的にするには、x軸のスケールとオフセットを変数にします。以下の様にすれば良いと思います。
scale = 2; % 幅
offset = idx * scale; % オフセット量
array = 1:numel(app.data(:, app.Spinner2.Value)); % y軸と同じサイズのベクトル
datax = array * scale - offset;
RK
RK le 14 Jan 2022
ありがとうございます。
上記、納得しました。
ご丁寧に対応いただきありがとうございました。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur App Designer を使用したアプリ開発 dans Centre d'aide et File Exchange

Produits

Version

R2021a

Community Treasure Hunt

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

Start Hunting!