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

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名を再設定する ということをやっています。何か他に回避方法はありますでしょうか。 それとも座標軸パネルの名前が変更されてしまうのは仕様でしょうか?

 채택된 답변

michio
michio 2018년 10월 24일

0 개 추천

下記コードでも現象が再現しました。仕様かどうか確認し情報があり次第アップデートします。
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
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
yuuji yamada
yuuji yamada 2018년 10월 30일
御回答ありがとうございます。 提示頂いた方法でうまくいきました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 座標軸の外観에 대해 자세히 알아보기

질문:

2018년 10월 24일

댓글:

2018년 10월 30일

Community Treasure Hunt

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

Start Hunting!