使用for循环内部的hold更新绘图

时间:2018-05-17 09:33:06

标签: matlab for-loop plot window matlab-figure

我正在使用此代码组合两个图

plot(x1,y1,'.','MarkerSize',20,'Color','r');
hold on; grid on;
plot(x2,y2,'x','MarkerSize',10,'Color','b');

xlim([-a a]);
ylim([-a a]);

现在我想更改x1y1x2y2的值,以便在我的图中包含多个点和一个十字。我尝试使用for循环来计算新值,但每次迭代此代码都会生成另一个数字 - 而我只想要一个包含所有点的数字。

我做了类似的事情:

for i=1:1:8
    % do things that compute x1,x2,y1,y2
    figure; hold on
    plot(x1,y1,'.','MarkerSize',20,'Color','r');
    hold on; grid on;
    plot(x2,y2,'x','MarkerSize',10,'Color','b');
    xlim([-a a]);ylim([-a a]);
    i=i+1;
end

我还尝试将hold on放在i=i+1之前,但仍然给我一个新的数字。

1 个答案:

答案 0 :(得分:2)

你可以做几件事:

  1. 简单的解决方案是将figure命令放在循环之外:

    figure(); hold on;
    for ...
      plot(x1, ...);
      plot(x2, ...);
    end
    
  2. 更好的解决方案是首先计算所有值,然后绘制它们:

    [x1,y1,x2,y2] = deal(NaN(8,1));
    for ind1 = 1:8
      % do some computations
      x1(ind1) = ...
      ...
      y2(ind1) = ...
    end
    figure(); plot(x1,y1,'.',x2,y2,'x');
    
  3. 最好的解决方案(在我看来)是更新现有的绘图对象,当新的数据点可用时:

    [x1,y1,x2,y2] = deal(NaN(8,1));
    figure(); hP = plot(x1,y1,'.',x2,y2,'x');
    for ind1 = 1:8
      % do some computations
      hP(1).XData(ind1) = <newly-computed x1>
      hP(1).YData(ind1) = <newly-computed y1>
      hP(2).XData(ind1) = <newly-computed x2>
      hP(2).YData(ind1) = <newly-computed y2>
    end