MATLAB GUI上でのコールバック関数操作

MATLABコマンドライン上で、下記のコマンドを実施した場合にはエラーが出ず、plotが表示される。
d = readtable('motor2.xlsx');
ti = d( 2:630 ,1); %% 2~630 行目の1列目をt軸に
y2 = d( 2:630 ,6); %% 2~630 行目の6列目をy軸に
plot(ti,y2);
同じ記述を、GUIのbuttonのコールバック関数に記述するとエラーが出ます。
・コマンドライン上と同じように動作させるには何が必要でしょうか。
・2つの違いはなんでしょうか。
エラー内容
使い方によるエラー matlab.graphics.data.DataMap/addChannel
Invalid subscript for Y. table 変数の添字は、実数の正の整数を含む数値配列、logical 配列、文字ベクトル、string 配列、文字ベクト
ルの cell 配列、または 1 つ以上の変数名と一致する pattern スカラーである必要があります。

 Accepted Answer

Kojiro Saito
Kojiro Saito on 11 Apr 2022

0 votes

GUIのコールバックでもプロットは同じように動作すると思います。私の環境では、MATLABのコマンドウィンドウでもplotの行でmatlab.graphics.data.DataMap/addChannel の同じエラーが出ました。tiとy2がテーブル型になっているとこのエラーが出ます。
中身のデータだけ取り出してプロットしてみればできると思います。
plot(ti.(1), y2.(1))
また、これだと別ウィンドウでプロットが表示されてしまうので同じGUI の中に描画したい場合は、App Designerのキャンバスタブで「座標軸」コンポーネントを置いてから
plot(app.UIAxes, ti.(1), y2.(1))
としてみてください。

4 Comments

なぜうまくいかないかと言いますと、テーブル型がplotの引数にないからです
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical | datetime | duration
d = readtable('sample2.xlsx')
d = 7×5 table
Var1 Var2 Var3 Var4 Var5 ____ ____ ____ ____ ____ 50 20 20 10 100 30 25 15 50 120 25 25 40 40 130 40 10 40 20 110 25 15 20 30 90 20 5 10 40 75 190 100 145 190 625
@Kojiro Saito さんの方法はdouble型に変換しています
d.(1)
ans = 7×1
50 30 25 40 25 20 190
class(d.(1))
ans = 'double'
以下のようにしても読み込める形になります
table2array(d)
ans = 7×5
50 20 20 10 100 30 25 15 50 120 25 25 40 40 130 40 10 40 20 110 25 15 20 30 90 20 5 10 40 75 190 100 145 190 625
class(table2array(d))
ans = 'double'
akihiro kitamura
akihiro kitamura on 11 Apr 2022
ありがとうございます。勉強になりました。
・xlsreadの場合(double型で格納) -> コマンドラインOK。 (但し、GUIで宣言すると非推奨)
・readtableの場合(table型で格納) -> GUIもコマンドラインもNG
質問する前にきちんと整理できていませんでした。
Kojiro Saito
Kojiro Saito on 11 Apr 2022
@Hernia Babyさん、補足ありがとうございます。
参考になって良かったです。プロットする際にデータ型で迷う場合はワークスペースから変数を選んで「プロット」タブから描画するとやりやすいかもしれません。コードも自動で発行されるので、後で再利用できますし。
こんなイメージです。
Hernia Baby
Hernia Baby on 12 Apr 2022
数値のみの場合は readmatrixもオススメです。 double型で読み込んでくれます。

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2022a

Community Treasure Hunt

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

Start Hunting!