如何在Matlab GUIDE中的axes1上的现有绘图上创建标记?

时间:2017-11-03 10:41:25

标签: matlab plot graph matlab-figure 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

我的gui中有两个轴。 axes1用于显示视频,没有问题。在视频显示之前的轴2中绘制了“v”,我想为它添加一个标记,它将根据for循环所在的帧“移动”。

最后一个图(帧,v(帧)......线有效,但在轴2上绘制点。

我有两个选择:

  1. 当循环移动到下一次迭代时,以某种方式删除最后一个标记图。实际上我不想这样做,因为我将来会实现一个滑块来控制该标记。

  2. 在绘图上创建标记的更简单方法,无需重新绘制标记:)

  3. 从现在开始非常感谢...

1 个答案:

答案 0 :(得分:1)

试试这个。基本上不要在循环内调用plot。它带来了一堆很慢的开销。把它称之为循环之外的一切。然后在里面使用手柄更新标记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

注意:我假设第一帧&是index 1,即使你的循环开始于2.但是,如果这不正确,那么你可以在循环外的调用中轻松换出1s 2s。