Динамическое построение данных на рисунке Matlab
Просто чтобы объяснить, с чем я столкнулся, у меня есть следующий код.
ind=(1:10);
A=[sin(ind);cos(ind);tan(ind);sec(ind)]';
plot(ind,A(:,1),ind,A(:,2),ind,A(:,3),ind,A(:,4));
результат выглядит так:
Теперь в моей настоящей программе матрица А обновляется каждые несколько секунд новыми строками. И я хочу динамически обновлять график, как только получаю новую строку. После некоторого поиска в Google я понял, что должен использовать drawnow, но не уверен, как.
У меня есть следующий код на данный момент.
B=A(1,:);
h = plot(B,'YDataSource','B');
for k = 1:size(A,1)
B=A(1:k,:);
refreshdata(h,'caller')
drawnow
pause(.25)
end
Но я получаю следующую ошибку по этому поводу:
Ошибка использования данных обновления (строка 70). Не удалось обновить данные Y из "B".
Ошибка в тесте (строка 9) refreshdata(h,'caller')
Пожалуйста помоги.
1 ответ
Я решил это после еще одного поиска в Google. Следующий код делает то, что я хотел:
ind=(1:10);
A=[sin(ind);cos(ind);tan(ind);sec(ind)]';
plots=plot(ind(1,1),A(1,1),ind(1,1),A(1,2),ind(1,1),A(1,3),ind(1,1),A(1,4));
for k = 1:size(plots,1)
set(plots, {'XData'}, {ind(1,1:k);ind(1,1:k);ind(1,1:k);ind(1,1:k)})
set(plots, {'YData'}, {A(1:k,1);A(1:k,2);A(1:k,3);A(1:k,4)})
drawnow
pause(.5)
end
Этот ответ помог мне найти решение: /questions/42317197/obnovlenie-grafika-matlab-s-neskolkimi-liniyami-krivyimi-dannyih/42317213#42317213