【问题标题】:Plot is not reset绘图未重置
【发布时间】:2014-04-01 08:34:21
【问题描述】:

我需要你的帮助。我的程序读取一个 M 文件,它是一个录制的视频。 为了显示每个图像,我使用“imagesc”,因为图像保存为 200x200 矩阵,标准化值范围为 0 到 1。

阅读每张图片后,我会做一些微积分。结果应显示为图像的叠加层(一个点和一条线)。使用下面的代码,这对于循环的第一次迭代可以正常工作。

在所有进一步的迭代中,图像被重新绘制(这是正确的),但点和线没有被清除。

如何实现在显示新图像时清除绘图。 我用“hold”命令尝试了几种变体。但没有成功。

附加问题(没那么重要): 是否可以将下面的“plot”命令与“set”(尤其是Point)交换?

我的程序由几个轴元素组成,我剪掉了这些元素以保持示例简单。这意味着我的用户界面在使用“绘图”命令时非常慢,所以我尝试使用“设置”来加快速度。

效果很好,但我不确定是否可以用“set”显示一个简单的Point。

提前致谢。

function work()
  h_figure = figure('Name','MainFig');
  hImage.ax = axes('Units', 'Pixels','Position', [50 375 200 200]);

  imagesc('Parent',hImage.ax,'CData',zeros(200));
  hImage.axc = get(gca, 'Children');

  hProfileLeft.ax = axes('Position', [50 200 200 100]);
  hProfileLeft.pl = plot(hProfileLeft.ax, 1:200); 

  for(frame = obj.Startframe:obj.Endframe)
    imgIntens= obj.video.A.intens(:,:,frame);
    ProfileResult = doSomeCalc(someArgs); 

    set(hImage.axc, 'CData', imgIntens); % Show Image(200x200 double)

    hold(hImage.ax, 'on'); % Using hold so that plot is overlayed

    plot(ProfileResult.peaks.x, ProfileResult.peaks.y,'Parent',hImage.ax); % Simple Point
    plot(ProfileResult.corridor.left, 1:200, 'Parent',hImage.ax); % Line

    set(hProfileLeft.pl,'YData', ProfileResult.trace); % Draw data to different axes
    hold(hImage.ax, 'off');
  end

end

【问题讨论】:

    标签: matlab plot matlab-figure


    【解决方案1】:

    我遇到了同样令人讨厌的行为。对我来说,结论是手动调用cla

    并使用line 代替绘图,它有更多选项(特别好,您可以自己标记线条)并且在调用时不会删除绘图,还会返回句柄。获得句柄后,您可以单独删除它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2021-12-17
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多