Участок внутри цикла в MATLAB

Я делаю что-то вроде этого:

a = [1:100];
for i=1:100,
    plot([1:i], a(1:i));
end

Моя проблема заключается в том, что график не показывается, пока цикл не будет завершен. Как я могу показать/обновить график на каждой итерации?

Ответы

Ответ 1

Используйте DRAWNOW

a = [1:100];
for i=1:100,
 plot([1:i], a(1:i));
 drawnow
end

В качестве альтернативы вы можете посмотреть ANYMATE из обмена файлами.

Ответ 2

Другой способ сделать это, если вы просто хотите визуализировать его без сохранения анимации, заключается в использовании 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; проще и быстрее), но когда вам нужно создавать более сложные фигуры с несколькими типами сюжетов, это может быть полезно.