2015-01-29 3 views
0

MATLAB GUIDE를 사용하여 실시간으로 동일한 축에 2 개의 변수를 플롯해야합니다. 지금은 서브 플롯 당 1 변수를 성공적으로 플로팅하고 있습니다. 함수 update_display에서이 같은 이전의 사람과 마지막 값을 연결, 그리고Matlab GUIDE에서 여러 곡선을 실시간으로 표시합니다.

handles.timer = timer(... 
    'ExecutionMode', 'fixedRate', ...  % Run timer repeatedly 
    'Period', 1, ...      % Initial period is 1 sec. 
    'TimerFcn', {@update_display,hObject}); % Specify callback function 

handles.subplot=subplot(2,1,1,'Parent',handles.uipanel3); 
handles.subplot1=subplot(2,1,2,'Parent',handles.uipanel3); 

handles.plot = plot(handles.subplot,0,0,'b'); 
handles.plot1 = plot(handles.subplot1,0,0,'r'); 

: 나는 _OpeningFcn에 타이머 2 handles.plot을 만들어 그렇게하기 위해

x = get(handles.plot,'XData'); 
x = [x, x(length(x))+1]; % (time=1sec) 
y = get(handles.plot,'YData'); 
y = [y, yf]; % A/D value = yf 

set(handles.plot,'XData',x); 
set(handles.plot,'YData',y); 

e = get(handles.plot1,'YData'); 
e = [e, error]; 
set(handles.plot1,'XData',x); 
set(handles.plot1,'YData',e); 

내가 원하는 것은이 두 변수를 같은 그림에 그려 넣는 것입니다. 나는 어쩌면 내가 handle.subplot 이전 handle.plot_parent '부모'handles.uipanel3 함께 변경해야한다고 생각하지만 어떤 문제가 예상되는 매개 변수가 확실하지 않기 때문에 그것을 구성하는 데 문제가 있습니다.

아무쪼록 고맙습니다. 시작

+0

동일한 '축'또는 다른 그림 (여전히 같은 그림에 있음)에 플롯하려는 경우 정확하게해야합니까? – Hoki

+0

좋아, 그 그림에. 나는 질문의 끝에서 그것을 분명히했다. 그러나 나는 방금 그것을 편집했고, 처음에도 그것을 넣었다. – Or10n

+0

나는 바꿔 말하게한다, 당신은 같은 것의 모든 곡선을 원한다 "subplot"**, 또는 별도의 하나? – Hoki

답변

2

가장 좋은 것은

  • figure는 "창"입니다 ... 줄거리/부가 적 줄거리/축/그림 등의 혼란을 취소 아마. 그래픽 개체, 비슷한 이름의 명령 figure으로 생성되었습니다.
  • axes도 그래픽 개체입니다. 컨테이너입니다. lines, surfaces, patches 등의 다른 모든 저급 그래픽 객체를 포함 할 수 있습니다. 두 개 이상의 유형이있는 하나 이상의 하위 객체를 포함 할 수 있습니다. 명령은 axes으로 만들거나 subplot처럼 만들 수 있습니다. subplot의 특수성은 axes을 쉽게 하나의 그림에 배치 할 수 있다는 것입니다. 그림에서 axes을 하나만 만들 계획이라면 subplot을 호출 할 필요가 없으며 직접 axes을 호출 할 수 있습니다.
  • line은 기본 그래픽 개체입니다. 속성은 마커가 포함되거나 포함되지 않은 연속 된 선 (스타일이 다른)을 표시하거나 마커 만 표시 할 수 있으며 반드시 선으로 "결합"할 필요는 없습니다. plot 명령은 입력으로 제공 한 매개 변수를 사용하여 line 오브젝트를 작성합니다. 정리 그와

,의 당신의 문제를 해결하자 : 귀하의 코멘트에 따르면

을, 나는 당신이 원하는 이해 같은 "부가 적 줄거리"(예를 들어, 귀하의 모든 플롯 (당신의 lines) :에 동일한 axes).

거의 다 왔으므로 첫 번째 함수에 axes을 정의한 다음이 axes의 속성을 수정하면 여러 줄을 받아 들일 수 있습니다 (기본적으로 모든 새 줄은 기존 줄을 지 웁니다). 그 후에 당신이했던 것처럼 당신의 라인을 초기화 한 다음, 업데이트 기능에서 라인을 업데이트하십시오.당신의 업데이트 기능에서 다음

handles.axe = axes('Parent',handles.uipanel3,'NextPlot','Add'); %// c reate an "axes" object which can accept multiple plots 

handles.plot0 = plot(handles.axe , 0,0 , 'b'); %// create empty line in the axes "handles.axe" 
handles.plot1 = plot(handles.axe , 0,0 , 'r'); %// create empty line in the axes "handles.axe" 

:

하여 타이머 정의에 코드를 바꿉니다 : 실제로 그래서

%// update your first line 
y = get(handles.plot0,'YData'); 
y = [y, yf];  %// A/D value = yf 
x = 0:numel(y)-1 ; %// This will create a vector [0 1 2 3 ...] the same size as "y" 

set(handles.plot0,'XData',x , 'YData',y); %// you can set both XData and YData in the same instruction 

%// update your second line 
e = [ get(handles.plot1,'YData') error ] ; %// you can concatenate the new value directly with the old data 
set(handles.plot1,'XData',x ,'YData',e); 

나는 저 작은 비트를 변경하는 자유를했다 귀하의 업데이트 기능, 그냥 일을 다른 방법을 보여줍니다. 당신이 그것을 고집하고 싶다면 당신의 초기 방법은 잘 작동해야합니다. 실제 트릭은 동일한 axes 개체에 2 줄의 초기 줄을 만드는 것이 었습니다.

+0

충분히 감사드립니다. 방금 Matlab GUIDE로 작업하기 시작했는데 몇 가지 구성으로 여전히 길을 잃었습니다. 감사! – Or10n