我正在研究MATLAB GUI,我在其中更新列表框中的工作空间变量,然后尝试在GUI中的轴上绘制它们。
我还有一个按钮用于执行绘图操作。但是当我点击情节按钮时,我会看到一个弹出的图形。
但根据我的应用,我必须在轴上创建图。我无法这样做
请帮助
我的情节按钮代码如下:
function plot_button_Callback(hObject, eventdata, handles, varargin)
% hObject handle to plot_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[x] = get_var_names(handles);
if isempty(x)
return
end
if isequal(x,'a')
% figure(gcf)
try
figure(1)
evalin('base',['plot(a,b,''--r'')'])
hold all
evalin('base',['plot(a,c,''k'')'])
hold all
evalin('base',['plot(a,d,''g'')'])
figure(2)
evalin('base',['plot(a,e,''g'')'])
hold all
grid on
catch ex
errordlg(...
ex.getReport('basic'),'Error generating linear plot','modal')
end
答案 0 :(得分:0)
在每个GUI回调中,您有一个名为handles
的变量,这是编辑/访问GUI中任何项目的关键。在绘制到现有轴的情况下,需要向绘图函数添加其他参数。这是我从我写的GUI中抽出的一行代码:
plot(handles.axes1, xdata, ydata);
现在,这种方法对您来说可能不太适合,因为您使用的是evalin
功能(我不建议这样做,将信息传递给GUI)。无论如何,使用这些约束实现目标的好方法是
a = evalin('base','a');
b = evalin('base','b');
plot(handles.axes1,a,b,'--r');
您的GUI轴可能未命名为axes
,您必须检查它。如果我正确理解您的目标,您也应该删除figure(1)
来电。
此外,每次绘图后,您都不需要调用全部保留,一次就足够了。