从外部函数绘制到轴 matlab GUI
Plot from external function to axes matlab GUI
我一直在尝试从外部函数获取绘图到 GUI 内的轴。我不 使用 GUIDE。我尝试了多种方法,但我一直收到错误
Not enough input arguments.
Error in dummyGUI/plotButton_callback (line 19)
set(hfigure,'CurrentAxes',handles.axes1)
现在我已经制作了一个虚拟图形用户界面,并且在命令中绘制了绘图window,但是我无法消除错误。
我的代码很简单,如下:
函数 dummyGUI
f = figure('Name','Name1','Tag','Name1','Units','Pixels','Position',[50 50 1000 600]);
plotButton = uicontrol('Style', 'pushbutton',...
'Parent', f,...
'String', 'plot',...
'Units', 'pixels', 'Position', [100 400 100 20],...
'Callback',@plotButton_callback);
axes1 = axes('Parent', f,...
'Units', 'pixels', 'Position', [50 50 500 300]);
function plotButton_callback(hObject, eventdata, handles)
hfigure = getappdata(0,'hfigure');
axes1 = getappdata(0,'axes1')
set(hfigure,'CurrentAxes',handles.axes1)
end
end
我在命令window中使用的代码是:
x = 1:100;
plot(x,x.^2);
hfigure = gcf;
hfigure = setappdata('0','hfigure')
明显少了什么,但我不知道是什么。
非常感谢。
罗马诺
您的代码的直接问题是,由于您没有使用 GUIDE,因此只有 两个 提供给回调函数的输入:
- 触发回调的对象
- 回调事件数据
未提供 handles
输入,因此当您尝试访问它时,MATLAB 会发出有关输入参数数量不正确的错误。
您应该自己明确地将必要的句柄传递给回调。
set(plotButton, 'Callback', @(src ,evnt)plotButton_callback(src, evnt, axes1))
function plotButtonCallback(hObject, eventdata, axes1)
hfigure = ancestor(hObject, 'figure');
set(hfigure, 'CurrentAxes', axes1)
end
或者由于 plotButtonCallback
是主函数的子函数,您可以访问父函数的 axes1
和 f
变量
function plotButtonCallback(hObject, eventdata)
set(f, 'CurrentAxes', axes1)
end
其他问题
当您调用 setappdata
时,您传递的是 字符串 '0'
而不是图形根对象 0
。此外,您需要向 setappdata
提供 third 输入以实际提供值。
setappdata(0, 'hfigure', hfigure)
通常,将内容保存在根 (0
) 对象的 appdata 中是个坏主意,因为如果您有两个 GUI 运行 实例,它们会干扰彼此。
我找到了一种方法,也许它不正确,但它正在工作。除此之外,我还发现了为什么我没有得到任何情节和任何错误消息。不知何故,变量没有正确传递,而且只是空的。
所以变量存在,但它不包含任何内容,因此没有错误消息,也没有情节。
我现在的做法是。
function plotButton_callback(hObject,eventdata,handles)
set(mainScreen,'CurrentAxes',plotFig);
[struct] = compare_cycle(var1,var2);
end
和compare_cycle.m
function [struct] = compare_cycle(var1,x)
struct = plot(xaxis,yaxis,...)
end
请不要关心所有变量的名称,因为这只是一个试用。
谢谢你对 Suever 的帮助。
我一直在尝试从外部函数获取绘图到 GUI 内的轴。我不 使用 GUIDE。我尝试了多种方法,但我一直收到错误
Not enough input arguments.
Error in dummyGUI/plotButton_callback (line 19)
set(hfigure,'CurrentAxes',handles.axes1)
现在我已经制作了一个虚拟图形用户界面,并且在命令中绘制了绘图window,但是我无法消除错误。
我的代码很简单,如下: 函数 dummyGUI
f = figure('Name','Name1','Tag','Name1','Units','Pixels','Position',[50 50 1000 600]);
plotButton = uicontrol('Style', 'pushbutton',...
'Parent', f,...
'String', 'plot',...
'Units', 'pixels', 'Position', [100 400 100 20],...
'Callback',@plotButton_callback);
axes1 = axes('Parent', f,...
'Units', 'pixels', 'Position', [50 50 500 300]);
function plotButton_callback(hObject, eventdata, handles)
hfigure = getappdata(0,'hfigure');
axes1 = getappdata(0,'axes1')
set(hfigure,'CurrentAxes',handles.axes1)
end
end
我在命令window中使用的代码是:
x = 1:100;
plot(x,x.^2);
hfigure = gcf;
hfigure = setappdata('0','hfigure')
明显少了什么,但我不知道是什么。
非常感谢。
罗马诺
您的代码的直接问题是,由于您没有使用 GUIDE,因此只有 两个 提供给回调函数的输入:
- 触发回调的对象
- 回调事件数据
未提供 handles
输入,因此当您尝试访问它时,MATLAB 会发出有关输入参数数量不正确的错误。
您应该自己明确地将必要的句柄传递给回调。
set(plotButton, 'Callback', @(src ,evnt)plotButton_callback(src, evnt, axes1))
function plotButtonCallback(hObject, eventdata, axes1)
hfigure = ancestor(hObject, 'figure');
set(hfigure, 'CurrentAxes', axes1)
end
或者由于 plotButtonCallback
是主函数的子函数,您可以访问父函数的 axes1
和 f
变量
function plotButtonCallback(hObject, eventdata)
set(f, 'CurrentAxes', axes1)
end
其他问题
当您调用 setappdata
时,您传递的是 字符串 '0'
而不是图形根对象 0
。此外,您需要向 setappdata
提供 third 输入以实际提供值。
setappdata(0, 'hfigure', hfigure)
通常,将内容保存在根 (0
) 对象的 appdata 中是个坏主意,因为如果您有两个 GUI 运行 实例,它们会干扰彼此。
我找到了一种方法,也许它不正确,但它正在工作。除此之外,我还发现了为什么我没有得到任何情节和任何错误消息。不知何故,变量没有正确传递,而且只是空的。 所以变量存在,但它不包含任何内容,因此没有错误消息,也没有情节。
我现在的做法是。
function plotButton_callback(hObject,eventdata,handles)
set(mainScreen,'CurrentAxes',plotFig);
[struct] = compare_cycle(var1,var2);
end
和compare_cycle.m
function [struct] = compare_cycle(var1,x)
struct = plot(xaxis,yaxis,...)
end
请不要关心所有变量的名称,因为这只是一个试用。
谢谢你对 Suever 的帮助。