复选框对象if语句未识别MATLAB指南中的变量



大家。可能,我在这里犯了一个完全愚蠢的错误,但这是问题:

我使用MATLAB指南制作了GUI。我在GUI中添加了一些复选框,以便他们在检查时会在Axes2上绘制某些内容,然后将其删除。如果您提出要求,将会有其他地块,因此可以保持和关闭。它是这样的工作:

function checkbox1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
if get(hObject, 'Value') == 1
    axes(handles.axes2);
    x = handles.x;
    distanceX_Plot = evalin('base', 'CAN2_MPC_C19_Dist_X_VehObj0_Cval_MPC');
    hold on;
    distanceX_Plotted = plot(x,distanceX_Plot, 'r');
    legend('Distance X')
    hold off; 
else 
    delete(distanceX_Plotted);
end

但是,如果零件被下划线中的demandx_plotter,则说变量可能未使用,并且在其他语句中使用的第二个decterx_plotts表示可以在定义它之前使用变量。

完全错误就是这样:

未定义的函数或变量'dandsx_plotted'。

untitled中的错误> checkbox1_callback(行224)delete(dandsx_plotted);

gui_mainfcn中的错误(第95行)feval(varargin {:});

untitled(第42行)gui_mainfcn(gui_state,varargin {:});

matlab.graphics.internal.figfile.figfile.figfile/read>@(hobject,eventdata)intere

错误('checkbox1_callback',hobject',hobject',eventdata,gudata(hobject))错误,同时评估uicontrol callback

感谢您的任何帮助。

您的当前功能将:

  1. 创建一组轴和绘图数据。手柄distanceX_Plotted可以访问此图。

  2. 尝试删除distanceX_Plotted,因为它没有输入IF-ELSE块的第一部分,因此不存在。

如果要在轴handle.axis2上绘制某些内容或删除它,则需要在通缉轴上绘制或删除轴(而不是绘图):

function checkbox1_Callback(hObject, eventdata, handles)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
if get(hObject, 'Value') == 1
    x = handles.x;
    distanceX_Plot = evalin('base', 'CAN2_MPC_C19_Dist_X_VehObj0_Cval_MPC');
    hold on;
    distanceX_Plotted = plot(x,distanceX_Plot, 'r','Parent', handles.axes2); % modified
    legend('Distance X')
    hold off; 
else 
    delete(handles.axes2); % modified 
end

编辑:如果您想删除绘制的最后一行,请在else块中写下此内容:

if ~isempty(handles.axes2.Children)
    delete(handles.axes2.Children(end));
end

它将删除您在axes2上打印的最后一行。

最新更新