问题描述
按照 Benoit_11 中 Use a slider in MATLAB GUI 给出的提示,我开始调整他的代码以适合我的情况。
我注意到当向量 SliderValue*(1:0.1:20).^2
修改为 SliderValue*(1:dt:20).^2
时,使用 dt = 0.1
,该图没有显示任何内容。这是必需的,因为我想使用由变量定义的表达式。
第二个问题:如何手动定义轴范围?
我的代码:
%function GUI_slider
% GUI Controls
dt = 0.1;
t = 0:0.1:100;
handles.figure = figure('Position',[100 100 1000 500],'Units','Pixels');
handles.axes1 = axes('Units','Pixels','Position',[60,120,900,300]);
handles.Slider1 = uicontrol('Style','slider',[60 40 400 25],...
'Min',min(t),'Max',max(t),'SliderStep',[.01 .01],...
'Callback',@SliderCallback);
handles.Edit1 = uicontrol('Style','Edit',[150 453 100 20],...
'String','Click on slider');
handles.Text1 = uicontrol('Style','Text',[70 450 70 20],'Slider Value:');
handles.xrange = 1:dt:20; %// Use to generate dummy data to plot
guidata(handles.figure,handles); %// Update the handles structure
function SliderCallback(~,~) %// This is the slider callback,executed when you release it or press the arrows at each extremity.
handles = guidata(gcf);
SliderValue = get(handles.Slider1,'Value');
set(handles.Edit1,'String',num2str(SliderValue));
plot(handles.xrange,SliderValue*(1:0.1:20).^2,'Parent',handles.axes1);
end
%end
我应该纠正什么才能让它运行?
解决方法
问题是您没有将 dt
传递给内部 SliderCallback
函数,因此它不知道 dt
是什么(您实际上应该收到一个错误告诉您)。如果您将 dt
添加到函数定义
function SliderCallback(~,~,dt)
,
正如 Cris Luengo 所指出的,如果取消注释第一行 (%function GUI_slider
) 和最后一行 (%end
),dt
将被视为内部所有子函数的全局变量您的主函数 (GUI_slider
),因此,可以在子函数 dt
内访问 SliderCallback(~,~)
,您可以使用 SliderValue*(1:dt:20).^2
运行代码。
对于第二个问题,您可以使用函数 axis
手动设置轴范围:
axis([x_min,x_man,y_min,y_max]);
或
set(gca,'xlim',[x_min,x_max]);
set(gca,'ylim',[y_min,y_max]);