Участок в реальном времени в MATLAB - PullRequest
12 голосов
/ 25 июня 2010

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

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

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

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

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

Ответы [ 2 ]

32 голосов
/ 25 июня 2010

Поскольку Edric упомянул , вы определенно захотите включить команду drawnow после вызова plot для принудительного обновленияграфика.Тем не менее, существует гораздо более эффективный и плавный метод для анимации графиков, который не требует повторного создания всего графика каждый раз.Вы можете просто инициализировать свой график, захватить дескриптор для объекта графика, а затем изменить свойства этого объекта в цикле с помощью команды 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 вы можете установить количество свойств осей , например, ограничений осей и т. Д., Если вы хотите, чтобы оси оставались фиксированными и не меняли свой внешний вид при каждом построенном новом векторе m.

11 голосов
/ 25 июня 2010

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

...