Динамическое построение данных на рисунке Matlab - PullRequest
0 голосов
/ 29 мая 2019

Просто чтобы объяснить, с чем я столкнулся, у меня есть следующий код.

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));

результат выглядит так:

enter image description here

Теперь в моей настоящей программе матрица А обновляется каждые несколько секунд новыми строками.И я хочу динамически обновлять график, как только получаю новую строку.После некоторого поиска в 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) данных обновления (h, «вызывающий»)

Пожалуйста, помогите.

1 Ответ

1 голос
/ 29 мая 2019

Я решил это после еще одного поиска в 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

Этот ответ помог мне найти решение: https://stackoverflow.com/a/36155528/919177

...