Динамическое построение данных на рисунке 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

Другие вопросы по тегам