2014-09-26 67 views
0

我正在MATLAB GUI中工作,我正在更新列表框中的工作空間變量,然後嘗試在GUI中繪製它們的軸。無法繪製在matlab中的座標軸從列表框

我有另一個按鈕來執行繪圖操作。但是當我點擊劇情按鈕,我得到了一個彈出圖中的情節。

但根據我的申請,我必須創建座標軸的情節。我不能這樣做

請幫助

MY情節按鈕,代碼如下:

function plot_button_Callback(hObject, eventdata, handles, varargin) 
% hObject handle to plot_button (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
[x] = get_var_names(handles); 
if isempty(x) 
    return 
end 
if isequal(x,'a') 
% figure(gcf) 

try 
    figure(1) 

    evalin('base',['plot(a,b,''--r'')']) 
    hold all 
    evalin('base',['plot(a,c,''k'')']) 
    hold all 
    evalin('base',['plot(a,d,''g'')']) 
    figure(2) 
    evalin('base',['plot(a,e,''g'')']) 
    hold all 
     grid on 
    catch ex 
    errordlg(... 
     ex.getReport('basic'),'Error generating linear plot','modal') 
end 

回答

0

在每個GUI回調,有一個名爲handles變量,它的關鍵在於編輯/訪問GUI中的任何項目。在繪製到現有軸的情況下,您需要爲繪圖函數添加一個附加參數。這是我從我寫了一個GUI猛拉一行代碼:

plot(handles.axes1, xdata, ydata); 

現在,這種方法可能不會輕易對你,因爲你使用的是evalin功能(我不建議這樣做的工作,它會將這些信息傳遞給gui會好得多)。無論如何,這些限制來實現你的目標的一個好方法是

a = evalin('base','a'); 
b = evalin('base','b'); 
plot(handles.axes1,a,b,'--r'); 

你的GUI軸可能未命名axes,你必須檢查上。如果我正確理解您的目標,您也應該刪除figure(1)電話。

此外,您不需要在每次繪圖之後都調用hold,只要一次就足夠了。

+0

謝謝,我現在正在軸上輸出.. :)但使用這種方法,現在我無法在軸上保持圖形。我需要所有的情節在同一個軸上。但即使在我全部使用時,我也只能得到最後一個座標軸。當我運行我的應用程序時,只保留所有的東西讓我彈出圖。你能否讓我知道如何把所有的圖表放在同一個軸上? – gaurav 2014-09-27 19:56:00

+0

@gaurav,嘗試使用'hold on'來代替或除了'hold all'外 – Trogdor 2014-09-29 14:24:01