похоже, что вы пытаетесь создать radio button panel способом, аналогичным this example tutorial on blinkdagger.com. В частности, я считаю, что вы пытаетесь создать SelectionChangeFcn, чтобы определить, как переключатели изменят ваш графический интерфейс. Я бы предложил следующее:
Прежде всего, вместо того, чтобы подбирать строку каждый раз при выборе переключателя, я предлагаю вам построить все ваши строки при создании графического интерфейса пользователя, а затем отредактировать свойство «Видимый» в зависимости от того, какая кнопка выбрана. Когда вы сделаете свой графический интерфейс, вы можете добавить эти строки где-то в коде (после осей создаются и помещаются в переменной 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
. Последние две строки выше добавляют ручки строк в структуру дескрипторов и обновляют данные графического интерфейса (hObject
должен быть дескриптором окна с графическим интерфейсом!).
Теперь вы можете использовать следующие для 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);
Какой бы язык был? Добавьте его в тег, и вы получите больше ответов. –