[英]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)
現在,我已經制作了一個虛擬GUI,並且在命令窗口中進行了繪制,但是我無法擺脫錯誤。
我的代碼非常簡單,如下所示:function 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')
顯然缺少一些東西,但是我不知道該怎么辦。
提前謝謝了。
羅曼諾
代碼的直接問題是,由於您未使用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
提供第三個輸入以實際提供值。
setappdata(0, 'hfigure', hfigure)
通常,將內容保存在root( 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.