Участок внутри петли в MATLAB - PullRequest
16 голосов
/ 10 мая 2010

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

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

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

Ответы [ 4 ]

21 голосов
/ 10 мая 2010

Использование РИСУНОК

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

Кроме того, вы можете взглянуть на ANYMATE из обмена файлами.

5 голосов
/ 10 мая 2010

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

3 голосов
/ 11 мая 2010

Из документации для кометы.m

t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
comet(x,y);
0 голосов
/ 08 августа 2018

Matlab позволяет сортировать операторы цикла для переменных

x = 0.0:0.1:2*pi

plot(x,cos(x));

является примером ......

В большинстве случаев вам не нужно рисовать в цикле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...