Ответ 1
Используйте DRAWNOW
a = [1:100];
for i=1:100,
plot([1:i], a(1:i));
drawnow
end
В качестве альтернативы вы можете посмотреть ANYMATE из обмена файлами.
Я делаю что-то вроде этого:
a = [1:100];
for i=1:100,
plot([1:i], a(1:i));
end
Моя проблема заключается в том, что график не показывается, пока цикл не будет завершен. Как я могу показать/обновить график на каждой итерации?
Используйте DRAWNOW
a = [1:100];
for i=1:100,
plot([1:i], a(1:i));
drawnow
end
В качестве альтернативы вы можете посмотреть ANYMATE из обмена файлами.
Другой способ сделать это, если вы просто хотите визуализировать его без сохранения анимации, заключается в использовании refreshdata
вместо plot
для последующих графиков. Вам все равно нужно вызвать drawnow
, чтобы он обновлялся на экране.
используйте
set(fig_handle,'XData',new_xdata_array)
set(fig_handle,'YData',new_ydata_array)
refreshdata
drawnow
или используйте
set(fig_handle,'XDataSource',xdata_array)
set(fig_handle,'YDataSource',ydata_array)
%call this whenever xdata_array and ydata_array are assigned new values to see it updated in the plot
refreshdata
drawnow
для вашего примера, это может выглядеть так:
a=[1:100];
figure;
h=plot(1,a(1));
for i=2:100
set(h,'XData',[1:i])
set(h,'YData',a(1:i))
refreshdata
drawnow
end
Это не все, что полезно для простых графических строк (для которых plot(); drawnow;
проще и быстрее), но когда вам нужно создавать более сложные фигуры с несколькими типами сюжетов, это может быть полезно.
t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
comet(x,y);