グラフ描画時、座標軸パネルの名前が変更されてしまう
1 回表示 (過去 30 日間)
古いコメントを表示
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名を再設定する ということをやっています。何か他に回避方法はありますでしょうか。 それとも座標軸パネルの名前が変更されてしまうのは仕様でしょうか?
0 件のコメント
採用された回答
michio
2018 年 10 月 24 日
下記コードでも現象が再現しました。仕様かどうか確認し情報があり次第アップデートします。
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 件のコメント
michio
2018 年 10 月 28 日
確認しましたところ、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
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!