2017-11-03 4 views
0

Ich habe versucht, einen Marker zu meinem Grundstück hinzuzufügen, aber ich habe bisher gescheitert. Dies ist das Stück Code an dem ich gerade arbeite:Wie erstellt man eine Markierung auf einem vorhandenen Diagramm auf Achsen1 in Matlab GUIDE?

v = evalin('base','a matrix in my workspace which is 1000 by 1'); 
    plot(v, 'Parent', handles.axes2); 
    for frames = 2:handles.frameCount-1 
     axes(handles.axes1); 
     imshow(handles.videoStruct(frames).cdata); 
     set(handles.text3, 'String', num2str(frames)); 
     drawnow; 
     pause(1/handles.videoObject.FrameRate); 
     axes(handles.axes2); 
     hold on; 
     plot(frames, v(frames), '.r'); 
    end 

Ich habe zwei Achsen in meiner GUI. axes1 wird verwendet, um ein Video anzuzeigen und hat keine Probleme. "v" ist in den Achsen 2 vor der Videoanzeige aufgetragen, und ich möchte eine Markierung hinzufügen, die sich "bewegt", je nachdem in welchem ​​Rahmen sich die for-Schleife befindet.

Das letzte Grundstück (Frames, v (Frames) ... Linie funktioniert, aber Plots Punkte auf Achsen2

Ich habe 2 Möglichkeiten:.

  1. Irgendwie löschen Sie die letzte Markierung Handlung, wenn die Schleife geht zur nächsten Iteration Ich möchte das nicht bevorzugen, weil ich einen Schieberegler implementieren werde, um diesen Marker in der Zukunft zu steuern

  2. Jeder einfacherer Weg, um eine Markierung in einem Diagramm zu erstellen, ohne es noch einmal zu zeichnen:)

Vielen Dank von jetzt an ...

Antwort

1

bereits. Rufen Sie den Plot grundsätzlich nicht innerhalb der Schleife auf. Es kommt mit einer Menge Overhead, die langsam ist. Nennen Sie es alles außerhalb der Schleife. Dann verwenden Sie innen die Griffe, um den Marker x & YData, die Bilder CData und den Text zu aktualisieren.

v = evalin('base','a matrix in my workspace which is 1000 by 1'); 
plot(handles.axes2. v); 
hold(handles.axes2,'on'); 
%USE these handles in the loop 
markH = plot(handles.axes2, 1, v(1), '.r'); %Initial plot and get handle toLine. 
imH = imshow(handles.videoStruct(1).cdata, 'Parent', handles.axes1); 

for frames = 2:handles.frameCount-1 
    % Do no replot just set x, y, & cdata, etc. 
    set(markH,'XData',frames,'YData',v(vframes)) 
    set(imH, 'CData',handles.videoStruct(frames).cdata); 
    set(handles.text3, 'String', num2str(frames)); 
    drawnow; 
    pause(1/handles.videoObject.FrameRate); 
end 

Hinweis: nahm ich das erste Bild & war index 1, obwohl Ihre Schleife jedoch bei 2 gestartet, wenn das dann nicht richtig ist, dass Sie leicht die 1s 2s in den Anrufen außerhalb der Schleife auslagern können .

Verwandte Themen