2017-11-03 7 views
0

私はプロットにマーカーを追加しようとしていますが、これまでには失敗しました。これは私が取り組んでいるコードです:Matlab GUIDEのaxes1の既存のプロットにマーカーを作成するには?

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 

私はguiに2つの軸を持っています。 axes1はビデオを表示するために使用され、問題はありません。 "v"はビデオ表示の前に軸2にプロットされており、forループがあるフレームに従って "移動"するマーカーを追加したいと思います。

最後のプロット(フレーム、V(フレーム)...ラインがaxes2上の点を動作しますが、プロット

私は2つのオプションがあります。

  1. ループ何とか最後のマーカープロットを削除します

  2. プロットしないでもう一度プロットすると、簡単にマーカーを作成することができます。次の繰り返しに移ります:実際には、私はこれを好きではありません。 )

が今から本当にありがとうございました...

答えて

1

はこれを試してみてください。基本的にループ内のプロットを呼び出さないでください。遅いオーバーヘッドが付属しています。ループの外側のすべてを呼び出します。次に、ハンドルを使用してマーカーx & ydata、画像CData、およびテキストを更新します。

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 

注:私はあなたのループはそれが正しくない場合、あなたは簡単にループの外の呼び出しで2秒間1秒を交換することができ、しかし2で始まっていても&がindex 1だった最初のフレームを想定し。

関連する問題