2012-11-07 7 views
0

내가 일을 구현하기 위해 노력하고 .. 나는 곡선이 나는 모든 최대의를 찾을 플롯 및 peakfinder 기능을 사용하여이 플롯을 만들고 다른 플롯 기능을 사용하여 X로 표시 한 다음 사용자가 잘못하면 최대 값의 위치를 ​​수정하거나 불필요한 경우 X를 지울 수있는 기능을 사용자에게 제공합니다.변경 플롯 수동

각 단계마다 특정 X 만 끌기 위해 무엇을 변경하거나 추가해야하는지 이해할 수 없습니다. 이 코드에서

그것은 GUI가 아닌하지만, 난 여전히 같은 문제를 가지고

function main 

global data_file 

x=0:0.1:100 
data_file=sin(x)*5+(rand(100*10+1,1)’-0.5) 

starting_sample= 1; 
sampling_rate=1; 

len = length(data_file); 

f = figure('NumberTitle','off','color','w','Menubar','none'); 

[picks1,locs1] = findpeaks(data_file(starting_sample:sampling_rate:len),'MINPEAKDISTANCE',10); 
a = axes('xlim',[0 100], 'ylim',[-5 5]); 

plot(1:sampling_rate:len, data_file(starting_sample:sampling_rate:len)); 
hold on 
p=plot(locs1,picks1,'x','linewidth',2,'color','r','ButtonDownFcn',@start_drag1); 
hold off 

set(f,'WindowButtonUpFcn',@stop_drag1) 

    function start_drag1(varargin) 
     set(f,'WindowButtonMotionFcn',@draging) 
    end 

    function draging(varargin) 
     pt= get(a,'currentpoint') 
     set(p,'XData',pt(1)*[1 1]) 
    end 

    function stop_drag1(varargin) 
     set(f,'WindowButtonMotionFcn','') 
    end 
end 

답변

0

코드 - 당신은 당신이 다음 드래그 할 수있는 최소/최대 스텝 크기를 지정하려면 draging 함수를 편집하여 일부 끌기 임계 값을 초과 한 후에 점진적으로 XData을 업데이트해야합니다. 이런 식으로 뭔가가 행해져 Yout 답변 - 그것을 끌 1에없는 두 가지가

function draging(varargin) 

    dragDist = 1; 
    pt = get(a,'currentpoint') 
    curX = get(p,'XData') 

    if (curX(1) - pt(1) > dragDist) %drag to the left 
     set(p,'XData',curX - dragDist) 
    elseif (pt(1) - curX(1) > dragDist) % drag to the right 
     set(p, 'XData', curX + dragDist) 
    end 

end 
+0

를 작동 할 수 있습니다

는 - 그것은 드래그 모든 XES을, 그리고 그것이 하나를 끌어에서 다른 사람을 떠나고 싶어 자신의 장소 2. 그것은 단지 측면으로 만 바뀌고 위로는 내려 가지 않습니다. 그 것들을 추가 할 수 있습니까? – user1742463

+0

@ user1742463 무엇이 누락 되었습니까? – slayton