この例のチュートリアルと同様の方法で、ラジオ ボタン パネルを作成しようとしているようです。具体的には、SelectionChangeFcnを作成して、ラジオ ボタンが GUI を変更する方法を定義しようとしていると思います。次のことをお勧めします。
まず、ラジオ ボタンが選択されるたびに線を再プロットする代わりに、GUI を作成するときにすべての線をプロットし、線の「表示」プロパティを「オン」または「オフ」に調整することをお勧めします。どのボタンが選択されているかによって異なります。GUI を作成するとき、コードのどこかに次の行を追加できます (軸が作成され、handles
変数に配置された後)。
handles = guidata(hObject); % Retrieve handles structure for GUI
set(handles.axes1,'NextPlot','add'); % Set axes to allow multiple plots
lineHandles = [plot(handles.axes1,x1,y1,'Visible','off') ...
plot(handles.axes1,x2,y2,'Visible','off') ...
plot(handles.axes1,x3,y3,'Visible','off')];
handles.lineHandles = lineHandles; % Update handles structure
guidata(hObject,handles); % Save handles structure
これにより、同じ軸上に 3 セットの線がプロットされます。これらの線は最初は表示されず、プロットされた各線のハンドルがベクトル変数に収集されますlineHandles
。上記の最後の 2 行は、ハンドル構造にライン ハンドルを追加し、GUI データを更新します ( hObject
GUI フィギュア ウィンドウへのハンドルである必要があります!)。
これで、SelectionChangeFcn に次を使用できます。
handles = guidata(hObject); % Retrieve handles structure for GUI
buttonTags = {'button1' 'button2' 'button3'};
if ~isempty(eventdata.OldValue), % Check for an old selected object
oldTag = get(eventdata.OldValue,'Tag'), % Get Tag of old selected object
index = strcmp(oldTag,buttonTags); % Find index of match in buttonTags
set(handles.lineHandles(index),'Visible','off'); % Turn old line off
end
newTag = get(eventdata.NewValue,'Tag'), % Get Tag of new selected object
index = strcmp(newTag,buttonTags); % Find index of match in buttonTags
set(handles.lineHandles(index),'Visible','on'); % Turn new line on
guidata(hObject,handles); % Save handles structure
注:プロットされている 3 つの線のいずれかを変更したい場合は、線ハンドルの 1 つの 'XData' および 'YData' プロパティを設定するだけです。例として、これは最初にプロットされたラインを新しい x および y データで更新します。
set(handles.lineHandles(1),'XData',xNew,'YData',yNew);