Построение по оси от функции

Я работаю над GUI в MATLAB; Я использовал РУКОВОДСТВО в командном окне. У меня есть несколько кнопок. Теперь проблема, у меня есть функция, в pusbhbutton4 и когда я нажимаю на него, я хочу построить результат по трем осям (10 - 12). Но не работает.

Код:

function pointsQRS = MyCustomPushButtonFunctionQRS10(VxQRS, VyQRS, VzQRS)
VxQRS=[[0:length(VxQRS)-1]' VxQRS];
axes(handles.axes10);
plot(VxQRS(:,2));
grid on 
Vx_QRS=ginput; 
x_pointsQRS=VxQRS(Vx_QRS(1,1)<=VxQRS(:,1) &  Vx_QRS(2,1)>=VxQRS(:,1),:);
m=1;


VyQRS=[[0:length(VyQRS)-1]' VyQRS];
axes(handles.axes11);
plot(VyQRS(:,2));
grid on
Vy_QRS=ginput; 
y_pointsQRS=VyQRS(Vy_QRS(1,1)<=VyQRS(:,1) & Vy_QRS(2,1)>=VyQRS(:,1),:);
if size(y_pointsQRS,1)<m
 m=2;
 end


  VzQRS=[[0:length(VzQRS)-1]' VzQRS];
  axes(handles.axes12);
  plot(VzQRS(:,2));
  grid on

  Vz_QRS=ginput; 
  z_pointsQRS=VzQRS(Vz_QRS(1,1)<=VzQRS(:,1) & Vz_QRS(2,1)>=VzQRS(:,1),:);
  if size(z_pointsQRS,1)<m
    m=3;
  end



  switch m 
   case 1
    x_pointQRS=x_pointsQRS;                                                                   
    y_pointQRS=y_pointsQRS(x_pointsQRS(1,1)<=y_pointsQRS(:,1) &    x_pointsQRS(end,1)>=y_pointsQRS(:,1),:);
    z_pointQRS=z_pointsQRS(x_pointsQRS(1,1)<=z_pointsQRS(:,1) &  x_pointsQRS(end,1)>=z_pointsQRS(:,1),:);
case 2
    y_pointQRS=y_pointsQRS;
    x_pointQRS=x_pointsQRS(y_pointsQRS(1,1)<=x_pointsQRS(:,1) & y_pointsQRS(end,1)>=x_pointsQRS(:,1),:);
    z_pointQRS=x_pointsQRS(y_pointsQRS(1,1)<=z_pointsQRS(:,1) & y_pointsQRS(end,1)>=z_pointsQRS(:,1),:);
case 3
    z_pointQRS=z_pointsQRS;
    x_pointQRS=x_pointsQRS(z_pointsQRS(1,1)<=x_pointsQRS(:,1) & z_pointsQRS(end,1)>=x_pointsQRS(:,1),:);
    y_pointQRS=y_pointsQRS(z_pointsQRS(1,1)<=y_pointsQRS(:,1) & z_pointsQRS(end,1)>=y_pointsQRS(:,1),:);
 end


 size_min=min([size(x_pointQRS,1) size(y_pointQRS,1) size(z_pointQRS,1)]) 
 pointsQRS([1:size_min],:)=[x_pointQRS([1:size_min],2)        y_pointQRS([1:size_min],2) z_pointQRS([1:size_min],2)];
      if size_min==0
       error('Wrong.');
       end
      end

Код кнопки:

% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, Data)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


pointsQRS = MyCustomPushButtonFunctionQRS10(Data.fileData(:,1), Data.fileData(:,2), Data.fileData(:,3))


save 'pointsQRS.mat' -mat pointsQRS

Ошибка, которую я все еще получаю:

Undefined variable "handles" or class "handles.axes10".

Error in MyCustomPushButtonFunctionQRS10 (line 3)
axes(handles.axes10);

Error in VKG_Zobrazovac>pushbutton4_Callback (line 156)
pointsQRS = MyCustomPushButtonFunctionQRS10(Data.fileData(:,1), Data.fileData(:,2), Data.fileData(:,3))

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in VKG_Zobrazovac (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in @(hObject,eventdata)VKG_Zobrazovac('pushbutton4_Callback',hObject,eventdata,guidata(hObject))


Error while evaluating UIControl Callback

Не могли бы вы дать мне подсказку, как заставить это работать должным образом?

1 ответ

Решение

Вы не проходите мимо handles структура для MyCustomPushButtonFunctionQRS10 (или, как вы это называете, Data) поэтому он не имеет доступа к axes ручки хранятся в handles, Вы должны пройти handles в качестве входного аргумента.

pointsQRS = MyCustomPushButtonFunctionQRS10(Data.fileData(:,1), ...
                                            Data.fileData(:,2), ...
                                            Data.fileData(:,3), ...
                                            Data)

И тогда ваш обратный вызов примет четвертый вход

function pointsQRS = MyCustomPushButtonFunctionQRS10(VxQRS, VyQRS, VzQRS, handles)

Кроме того, я бы рекомендовал использовать 'Parent' собственностью plot указывать родительские оси вместо axes,

plot(VxQRS(:,2), 'Parent', handles.axes10);
grid(handles.axes10, 'on')
Vx_QRS = ginput(handles.axes10); 
Другие вопросы по тегам