Подтвердить что ты не робот

График реального времени в MATLAB

Я очень новичок в MATLAB, и я пытался отобразить график в реальном времени некоторых вычислений. У меня есть вектор размера N, и я работаю со значениями m за раз (скажем m = N/4), поэтому я хочу построить первые значения m, а затем, как только будут вычислены значения второго m замените их первым.

Мой подход был следующим:

for i=1:N,
  ...
  //compute m
  ...
  plot(m);
end;

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

Я думаю, что должен быть способ, которым я не знаю, для обновления сюжета, а не для повторного отображения его каждый раз.

4b9b3361

Ответ 1

Вы можете добавить вызов DRAWNOW, чтобы заставить график обновляться. См. Справочную страницу . Обратите внимание, что DRAWNOW вызывает сброс очереди графических событий, что может вызвать выполнение обратных вызовов и т.д.

Ответ 2

Как Эдрик упомянул, вы обязательно захотите включить drawnow после вызова plot, чтобы принудительно обновить графику. Тем не менее, существует гораздо более эффективный и более плавный способ анимации сюжетов, который не предполагает воссоздания всего сюжета каждый раз. Вы можете просто инициализировать свой сюжет, захватить handle в объект сюжета, а затем изменить свойства этого объекта в своем цикле с помощью set. Вот пример:

hLine = plot(nan);         % Initialize a plot line (which isn't displayed yet
                           %   because the values are NaN)
for i = 1:N                % Loop N times
  ...
  % Compute m here
  ...
  set(hLine, 'YData', m);  % Update the y data of the line
  drawnow                  % Force the graphics to update immediately
end

Кроме того, перед вашим циклом и после вызова plot вы можете установить ряд свойств осей, например, axes limits и т.д., если вы хотите, чтобы оси оставались фиксированными и не меняли свой внешний вид с каждым новым вектором m, который нанесен на график.