您似乎正在尝试以类似于blinkdagger.com 上的示例教程的方式创建单选按钮面板。具体来说,我相信您正在尝试创建一个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
这将在同一轴上绘制三组线。这些线最初是不可见的,并且每条绘制线的句柄都收集在向量变量lineHandles
中。上面的最后两行将线句柄添加到句柄结构并更新 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
注意:如果您想更改绘制的三条线中的任何一条,您可以简单地设置其中一个线柄的“XData”和“YData”属性。例如,这将使用新的 x 和 y 数据更新第一条绘制线:
set(handles.lineHandles(1),'XData',xNew,'YData',yNew);