グラフ描画時、座標軸​パネルの名前が変更さ​れてしまう

7 views (last 30 days)
yuuji yamada
yuuji yamada on 24 Oct 2018
Commented: yuuji yamada on 30 Oct 2018
matlab 2018aを使用し、matlab gui にてツールを作っています。 座標軸パネルに Tag名 'axes_test'を設定し、ボタンを押下するとグラフが描画されるツールを作っています。 ところが座標軸パネルにグラフを描画するとTag名が変わってしまうことが判明しました。 panel = findobj(form, 'Tag', 'axes_test'); plot(panel, ・・・・・・); ←←← このメソッドを実行するとpanelのTag名が変わってしまう。
Tag名が変更されてしまうため、ボタンを押下時、一回目は座標軸パネルにグラフが描画されるのですが、 2回目以降の処理では座標軸パネル'axes_test'が見つからずpanelオブジェクトがemptyになり、エラーに なってしまいます。 現在、回避手段としてグラフが描画される前にTag名を変数に退避しておいてグラフ描画後、退避していたTag名を再設定する ということをやっています。何か他に回避方法はありますでしょうか。 それとも座標軸パネルの名前が変更されてしまうのは仕様でしょうか?

Accepted Answer

michio
michio on 24 Oct 2018
下記コードでも現象が再現しました。仕様かどうか確認し情報があり次第アップデートします。
form = gcf;
axes1 = gca;
axes1.Tag = 'axes_test';
panel = findobj(form, 'Tag', 'axes_test');
panel.Tag % ans = 'axes_test'
plot(panel,rand(10,2));
panel.Tag % ans = 0×0 の空の char 配列
  2 Comments
michio
michio on 28 Oct 2018
確認しましたところ、plot で axes のプロパティ値が初期化されるのは仕様通りとのことでした。Tag を含むプロパティ値を保持する場合には、プロットを重ね書きするときにも使用する hold on か、NextPlot プロパティを replacechiledren か add に設定しておく方法があります。
下記コード例も参考にしていただけますと幸いです。
% Example 1:
form = gcf;
axes1 = gca;
axes1.Tag = 'axes_test';
panel = findobj(form, 'Tag', 'axes_test');
panel.Tag % ans = 'axes_test'
hold(panel,'on')
plot(panel,rand(10,2));
panel.Tag
% Example 2:
form = gcf;
axes1 = gca;
axes1.Tag = 'axes_test';
panel = findobj(form, 'Tag', 'axes_test');
panel.Tag % ans = 'axes_test'
panel.NextPlot = 'replacechildren'; % or 'add'
plot(panel,rand(10,2));
panel.Tag
yuuji yamada
yuuji yamada on 30 Oct 2018
御回答ありがとうございます。 提示頂いた方法でうまくいきました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!