Вот одна версия, которая ускоряет ее примерно в два раза на моей машине.Я уменьшил количество очков до 10^3
.
clear f g;
t = 0:10^3; % I have about 10^6 data points
x = sin(t); % Let's pretend the data I'm plotting is the sine function
y = cos(t); % I have multiple data series being plotted in 'snapshots'
num_frames = length(t);
tic;
for k = 1:num_frames
clf; hold on;
plot(1, x(k),'bo')
plot(2, y(k),'bo')
ax = gca;
ax.XLim = [.8 2.2];
ax.YLim = [-1,1];
f(k) = getframe();
end
toc
% This is faster
h_fig = figure;
g(num_frames) = struct('cdata', [], 'colormap', []);
tic;
ax = axes(h_fig);
ax.XLim = [.8 2.2];
ax.YLim = [-1,1];
hold on;
p1 = plot(1,x(1), 'bo');
p2 = plot(2,y(1), 'bo');
drawnow;
g(1) = getframe(ax);
for k = 2:num_frames
p1.YData = x(k);
p2.YData = y(k);
g(k) = getframe(ax);
end
toc
Обратите внимание, что без getframe
вторая версия работает примерно в 100 раз быстрее.таким образом, если вы знаете, как вычислить cdata
одного кадра, это может быть намного быстрее, чем построить данные и использовать getframe
.
Одно замечание: я не смог скопировать, вставить и запустить ваш код без ошибок.Даже если вы пишете быстро, было бы неплохо, если бы вы могли проверить его на наличие ошибок перед публикацией.