Я очень плохо знаком с MATLAB, и я пытался отобразить оперативный график некоторых вычислений. Я имею N
размерный вектор и я работаем с m
значения за один раз (говорят m = N/4
), таким образом, я хочу вывести первое на печать m
значения и затем как только второе m
значения вычисляются, сделали, чтобы они заменили первый график.
Мой подход был следующие:
for i=1:N,
...
//compute m
...
plot(m);
end;
но это не удается обновить график в каждом цикле и ожидает всех циклов, чтобы закончить отображать данные на графике. Мой вопрос: Если я использую другую функцию вместо plot
или я мог добавить некоторую задержку каждого цикла?
Я думаю, что должен быть способ, которым я не знаю для обновления графика вместо того, чтобы повторно вывести его на печать каждый раз.
Вы можете добавить вызов DRAWNOW
, чтобы заставить график обновляться. См. справочную страницу. Обратите внимание, что DRAWNOW
вызывает очистку очереди графических событий, что может привести к выполнению обратных вызовов и т. д.
Как Эдрик упомянул , вы обязательно захотите включить команду drawow
после вызова 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
.