使用 GUI 绘图

Graphing with GUI

正在使用

x=-10:0.1:10
f=x+2

在基本的 m 文件中工作正常。

但现在我正在尝试使用 GUI 并通过输入函数来绘制绘图。 它给了我一堆错误。谁能解释一下当我设置了 x 的范围时如何给 y 赋值?

% --- Executes on button press in zimet.
function zimet_Callback(hObject, eventdata, handles)
% hObject    handle to zimet (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
x=-10:0.1:10;
f=inline(get(handles.vdj,'string'))
y(x)=f

axes(handles.axes)
plot(x,y)







color=get(handles.listbox, 'value')
switch color
    case 2
       set(plot(x,y),'color', 'r')
    case 3
        set(plot(x,y),'color', 'g')
    case 4
        set(plot(x,y),'color', 'b')
end

style=get(handles.popupmenu, 'value')
switch style
    case 2
        set(plot(x,y), 'linestyle','--')
    case 3
        set(plot(x,y), 'linestyle','-.')
    case 4
        set(plot(x,y), 'linestyle',':')
end
rezgis=get(handles.grid, 'value')
switch rezgis
    case 1
        grid on
    case 2
        grid off
end

请注意,根据 inline function documentation,此功能将在以后的版本中删除;您可以改用 anonymous functions(见下文)。

inline函数要求输入一串字符,而get函数return将编辑框的文本作为cellarray,所以你必须使用 char 函数对其进行转换。

另外,一旦你生成了inline对象,它就是你的函数,所以你必须直接使用它。

使用内联

您必须这样更改您的代码:

x=-10:0.1:10;
% f=inline(get(handles.vdj,'string'))
% y(x)=f
f=inline(char(get(handles.vdj,'string')))
y=f(x)
axes(handles.axes)
ph=plot(x,y)

使用匿名函数

您可以通过这样使用 anonymous functions 获得相同的结果:

x=-10:0.1:10;
% Get the function as string
f_str=char(get(handles.vdj,'string'))
% add @(x) to the string you've got
f_str=['@(x) ' f_str ];
% Create the anonymous function
fh = str2func(f_str)
% Evaluate the anonymous function
y=fh(x)

axes(handles.axes)
ph=plot(x,y)

编辑

您可以通过以下方式解决线条颜色和样式设置的问题:

  • 通过添加 return 值修改对 plot 的调用(它是绘图的句柄(见上文:ph=plot(x,y)
  • 通过将对绘图的调用替换为绘图本身的句柄(如上所述的 ph 变量)来增加对 set 的调用机会

因此,要更改颜色和线条样式,请在 switch 部分:

set(ph,'color','r')
set(ph,'linestyle','--')

希望这对您有所帮助,

Qapla'