これが正しい方法であるかどうかはわかりませんが、呼び出されたときに基本的に4つのプロットをリセットする関数が必要です。軸に表示するプロットをドロップダウンで選択できるようにhandles.distplot1
、プロットを などとして保存します。handles.distplot2
いくつかの異なるイベントの後にこれらのプロットをリセットする必要があるため、当然のことながら、それらを関数に入れ、コードの冗長性を回避したいと考えています。私は次のような機能を願っています
function setupDistPlots(hObject, eventdata, handles)
% filler data for surfc
x = [1 2];
z = zeros(2);
% setup blank plots for funtion to work with
a = figure(1); set(a, 'Visible', 'off')
handles.distplot1 = surfc(x, x, z);
b = figure(2); set(b, 'Visible', 'off');
handles.distplot2 = bar(NaN);
c = figure(3); set(c, 'Visible', 'off')
handles.distplot3 = surfc(x, x, z);
d = figure(4); set(d, 'Visible', 'off')
handles.distplot4 = bar(NaN);
guidata(hObject, handles);
意図したとおりに動作するはずですが、それを呼び出す方法がわかりません。オープニング機能で試してみましたが、後でsetupDistPlots(hObject, eventdata, handles)
アクセスしようとすると次のエラーが表示されます。handles.distplot1
Reference to non-existent field 'distplot1'.
Error in tabbedGUI>distanceToggle_Callback (line 212)
distribution(hObject,
handles.distplot1, ...
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in tabbedGUI (line 45)
gui_mainfcn(gui_State, varargin{:});
Error in
@(hObject,eventdata)tabbedGUI('distanceToggle_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback
編集:また、私が改善できることをすべて指摘してください。私が Matlab で行うことはすべて、より良い方法があるに違いないと感じています。
edit2: オープニング関数の問題は、オープニング関数setupDistPlots
の呼び出しの前にguidata(hObject, handles)
呼び出していました。ただし、ボタンを押して「setupDistPlots」を再度呼び出すと、次のエラーが発生します。
Error using matlab.graphics.primitive.Data/set
Invalid or deleted object.
Error in andrewDistribution (line 45)
set(hplot1, 'xData', x1, 'yData', y1, 'zData', zeros(length(x1)))
Error in tabbedGUI>distanceToggle_Callback (line 200)
distribution(hObject, handles.distplot1, ...
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in tabbedGUI (line 45)
gui_mainfcn(gui_State, varargin{:});
Error in @(hObject,eventdata)tabbedGUI('distanceToggle_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback