从外部函数绘制到轴 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,因此只有 两个 提供给回调函数的输入:

  1. 触发回调的对象
  2. 回调事件数据

未提供 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 是主函数的子函数,您可以访问父函数的 axes1f 变量

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 的帮助。