Хитрость заключается в том, чтобы не использовать такие функции, как scatter
или plot
в анимации, а вместо этого изменять данные на графике, который уже существует. Эти функции всегда сбрасывают свойства осей, поэтому вы видите сброс представления. При изменении существующего графика оси не затрагиваются.
Функция scatter3
(как и все функции построения графиков) возвращает дескриптор графического объекта, который отображает график. В случае scatter3
этот дескриптор имеет здесь три свойства, представляющие интерес: XData
, YData
и ZData
. Вы можете обновить эти свойства, чтобы изменить расположение точек:
N = 100;
data = randn(N,3) * 40;
h = scatter3(data(:,1),data(:,2),data(:,3));
for ii = 1:500
data = data + randn(N,3);
set(h,'XData',data(:,1),'YData',data(:,2),'ZData',data(:,3));
drawnow
pause(1/5)
end
Новый data
также может быть совершенно другим, ему даже не нужно содержать одинаковое количество точек.
Но при изменении этих трех свойств вы увидите, что свойства осей XLim
, YLim
и ZLim
изменятся. То есть оси будут масштабироваться для размещения всех данных. Если вам нужно это предотвратить, установите оси XLimMode
, YLimMode
и ZLimMode
на 'manual'
:
set(gca,'XLimMode','manual','YLimMode','manual','ZLimMode','manual')
При ручной установке пределов режим ограничения всегда устанавливается на ручной.