Вместо выполнения высокоуровневого вызова plot
рассмотрите возможность настройки свойств дескриптора линии *1003*, в частности XData
и YData
, в цикле:
figure(1);
lHandle = line(nan, nan); %# Generate a blank line and return the line handle
for i = 1:1000
X = get(lHandle, 'XData');
Y = get(lHandle, 'YData');
X = [X i];
Y = [Y i];
set(lHandle, 'XData', X, 'YData', Y);
end
Делая это таким образом, tic
/ toc
до / после кода дает 0,09 секунды;наивный plot
, как вы, как вы, наверное, видели, дает время выполнения почти 20 секунд.
Обратите внимание, что я использовал get
в этом примере только для генерации набора данных;Я предполагаю, что для графика в реальном времени у вас есть DatasetX
и DatasetY
, поэтому вам нужно соответствующим образом обработать ваши данные.Но, в конце концов, как только вы получите набор данных, который хотите построить в определенное время, просто set
вся строка XData
и YData
.
Наконец, обратите внимание, что это set
вызов становится немного громоздким для очень больших наборов данных, так как мы должны каждый раз устанавливать данные строк, а не добавлять их к ним.(Но это, конечно, все же быстрее, чем использование plot
.) Это может быть достаточно хорошо, в зависимости от того, как часто меняется ваш набор данных.См. этот вопрос для более подробной информации.
EDIT : Начиная с MATLAB R2014b, объект animinatedline
упрощает построение точек из потоковых данных:
Анимированные линейные объекты оптимизируют линейную анимацию, накапливая данные из потокового источника данных.После создания исходной анимированной линии с использованием функции анимированной линии вы можете добавлять новые точки в линию без необходимости переопределять существующие точки.Измените внешний вид анимированной линии, задав ее свойства.