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

1 次查看(过去 30 天)
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