Visibility of several plot in the same axes by checkmark in GUI

조회 수: 1 (최근 30일)
JB
JB 2017년 9월 27일
댓글: JB 2017년 9월 27일
I'm preparing a gui with 2-30 plots where the visibility is controlled by individual checkmark selections. The code is working perfectly when I show two plots in different axes (see gui below)
But if I want to show the two plots in the same axes (axes1) I get this error:
Error using matlab.graphics.chart.primitive.Line/set
Invalid or deleted object.
Error in test>checkbox1_Callback (line 93)
set(handle_plot1, 'visible' , 'on')
What am I doing wrong?
Here is my code:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
X1=[1 2 3 4];
Y1=[-1 -2 -3 -4];
X2=[1 2 3 4];
Y2=[1 2 3 4];
set(gca, 'NextPlot', 'add'); % Equivalent to: hold('on')
handles.handle_plot1 = plot(X1,Y1,'visible','off','LineWidth',2,'color', [0 0 0],'linestyle', '--','parent',handles.axes1);
handles.handle_plot2 = plot(X2,Y2,'visible','off','LineWidth',2,'color', [1 0 0],'linestyle', '--','parent',handles.axes1);
guidata(hObject, handles);
% --- Executes on button press in checkbox1.
function checkbox1_Callback(hObject, eventdata, handles)
handle_plot1 = handles.handle_plot1
if (get(hObject,'Value')) == 1
set(handle_plot1, 'visible' , 'on')
else
set(handle_plot1, 'visible' , 'off')
end
% --- Executes on button press in checkbox2.
function checkbox2_Callback(hObject, eventdata, handles)
handle_plot2 = handles.handle_plot2
if (get(hObject,'Value')) == 1
set(handle_plot2, 'visible' , 'on')
else
set(handle_plot2, 'visible' , 'off')

채택된 답변

Jan
Jan 2017년 9월 27일
편집: Jan 2017년 9월 27일
Now try:
set(handles.axes1, 'NextPlot', 'add'); % Not "gca" as in my last suggestion
handles.handle_plot1 = plot(X1,Y1,'visible','off','LineWidth',2, ...
'color', [0 0 0],'linestyle', '--', 'parent', handles.axes1);
handles.handle_plot2 = plot(X2,Y2,'visible','off','LineWidth',2, ...
'color', [1 0 0],'linestyle', '--', 'parent', handles.axes1);
guidata(hObject, handles);
By the way: I use a specific function to create the 'on', 'off' dynamically:
function S = OnOffStr(D)
OffOn = {'off', 'on'};
L = (D ~= 0) + 1; % 0/FALSE => 1, anything else => 2
if length(L) == 1
S = OffOn{L}; % Reply a string
else
S = OffOn(L); % Reply a cell string
end
Then the callback looks like:
function checkbox1_Callback(hObject, eventdata, handles)
set(handles.handle_plot1, 'Visible', OnOffStr(get(hObject,'Value')));

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Classical Control Design에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by