checkbox object IF 语句无法识别 MATLAB GUIDE 中的变量

checkbox object IF statement does not recognize the variables in MATLAB GUIDE

各位。可能我在这里犯了一个非常愚蠢的错误,但问题是:

我使用 MATLAB GUIDE 制作了一个 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

但是 IF 部分中的 distanceX_Plotted 带有下划线并表示变量可能未使用,而 ELSE 语句中的第二个 distanceX_Plotted 表示变量可以在定义之前使用。

完整的错误是这样的:

未定义函数或变量'distanceX_Plotted'。

无标题错误>checkbox1_Callback(第 224 行)删除(distanceX_Plotted);

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

无标题错误(第 42 行)gui_mainfcn(gui_State, varargin{:});

错误 matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)untitled('checkbox1_Callback',hObject,eventdata,guidata(hObject)) 评估 UIControl 回调时出错

感谢您的帮助。

您当前的函数将:

  1. 创建一组轴并绘制数据。可以使用句柄 distanceX_Plotted.

  2. 访问此图
  3. 尝试删除 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 上打印的最后一行。