在 MATLAB GUI 中使用滑块
Using a slider in MATLAB GUI
根据 Benoit_11 in 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', 'Position', [60 40 400 25], ...
'Min', min(t), 'Max', max(t), 'SliderStep', [.01 .01], ...
'Callback', @SliderCallback);
handles.Edit1 = uicontrol('Style', 'Edit', 'Position', [150 453 100 20], ...
'String', 'Click on slider');
handles.Text1 = uicontrol('Style', 'Text', 'Position', [70 450 70 20], ...
'String', '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]);
根据 Benoit_11 in 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', 'Position', [60 40 400 25], ...
'Min', min(t), 'Max', max(t), 'SliderStep', [.01 .01], ...
'Callback', @SliderCallback);
handles.Edit1 = uicontrol('Style', 'Edit', 'Position', [150 453 100 20], ...
'String', 'Click on slider');
handles.Text1 = uicontrol('Style', 'Text', 'Position', [70 450 70 20], ...
'String', '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]);