【问题标题】:Plot from external function to axes matlab GUI从外部函数绘制到轴 matlab GUI
【发布时间】:2016-09-14 13:56:00
【问题描述】:

我一直在尝试从外部函数获取图形到 GUI 内的轴。我使用 GUIDE。我尝试了多种方法,但我一直收到错误

Not enough input arguments.

Error in dummyGUI/plotButton_callback (line 19)
    set(hfigure,'CurrentAxes',handles.axes1)

现在我已经制作了一个虚拟 GUI,并且在命令窗口中制作了绘图,但我无法摆脱错误。

我的代码很简单,如下: 函数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

我在命令窗口中使用的代码是:

x = 1:100;
plot(x,x.^2);
hfigure = gcf;
hfigure = setappdata('0','hfigure')

显然缺少一些东西,但我不知道是什么。

非常感谢。

罗马音

【问题讨论】:

    标签: matlab user-interface matlab-figure axes


    【解决方案1】:

    您的代码的直接问题是,由于您没有使用 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 提供第三个​​ 输入以实际提供值。

    setappdata(0, 'hfigure', hfigure)
    

    一般来说,将内容保存在根 (0) 对象的 appdata 中是个坏主意,因为如果您有两个 GUI 实例正在运行,它们会相互干扰。

    【讨论】:

    • 感谢您的回答。我已经尝试过了,错误消息消失了。但是,如果单击该按钮,它仍然不会将绘图显示到轴中。对于其他问题,您建议做什么?
    • 其他人对此有示例或答案吗?我真的需要知道怎么做。我在论坛上阅读了有关此主题的多个站点和问题,但找不到明确的示例或答案。大多数解释对我来说很不清楚,还是我自己?
    • @Romano 它是在哪里绘制的?您必须将绘图代码放在按钮回调中。我没有在我的回答中写出那部分
    • 它不绘制任何东西。如果我仍然需要将绘图代码放在我的回调函数中,那么将所有绘图代码放在外部函数中有什么好处?我真的很抱歉,但我现在真的很困惑。
    • @Romano 您的示例没有显示任何绘图代码...您可以轻松地从回调中调用 any 函数
    【解决方案2】:

    我找到了一种方法,也许它不是正确的,但它正在工作。除此之外,我还发现了为什么我没有得到任何情节和任何错误消息。不知何故,变量没有正确传递,并且只是空的。 所以变量存在,但它不包含任何内容,因此没有错误消息,也没有情节。

    我现在的做法是。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 2015-08-24
      • 1970-01-01
      • 2015-06-10
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多