Вместо set(h,'XData',x,'YData',y) ;
, hold on
с новым графиком может позволить вам добавить что-то на плоскость, поэтому может работать следующий код:
x = rand(10,1) ; y = rand(10,1) ;
h = scatter(x,y,'Or') ;
hold on % allow appending
for i = 1:100
x = rand(10,1)
y = rand(10,1) ;
h = scatter(x,y,'Or') ; %draw new points
% set(h,'XData',x,'YData',y) ;
drawnow
pause(0.1)
end
Но сохраняя все данные, такие как сохранение новой статистикив новый столбец, который находится сразу за старыми, настоятельно рекомендуется:
[x,y] = deal(zeros(10,100)); %pre-allocate
figure(1); hold on
for ii = 1:100
x(:,ii)=rand(10,1); %save new x
y(:,ii)=rand(10,1); %save new y
scatter(x(:,ii),y(:,ii),'Or') ; %plot them
drawnow
pause(0.1)
end
Более того, иногда у hold on
есть недостаток, когда нам нужно дополнительно редактировать фигуру, имея дело с ручкой, как каждые десять пунктовбудет иметь уникальную ручку.Чтобы сохранить их все в одном, я думаю, что небольшое изменение в вашем коде может быть лучшим решением, если у нас не слишком много данных для построения графика (требуется повторное разрешение векторов в ОЗУ, «очистка» фигуры и повторное построение всехточки, в том числе старые, снова и снова).
x = rand(10,1) ; y = rand(10,1) ;
h = scatter(x,y,'Or') ;
for i = 1:100
x(end+1:end+10) = rand(10,1) ; % append x
y(end+1:end+10) = rand(10,1) ; % append y
set(h,'XData',x,'YData',y) ; % draw new figure
drawnow
pause(0.1)
end