使用 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'
正在使用
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'