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

How to create a marker on a existing plot on axes1 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

我的图形用户界面中有两个轴。 axes1 用于显示视频,没有问题。 "v" 在视频显示之前绘制在轴 2 中,我想向其添加一个标记,它将 "move" 根据 for 循环所在的帧。

最后一个 plot(frames, v(frames)... 行有效但在 axes2 上绘制点。

我有两个选择:

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

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

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

试试这个。基本上不要在循环内调用 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 开始。但是,如果这不正确,那么您可以在循环。