В оста на Matlab, как да актуализирате само данните, като същевременно запазите всички свойства на оста?

Трябва да създам филм. Да предположим, че създавам ос и начертавам върху нея нещо много персонализирано:

figure;
ax = plot(x, y, 'linewidth', 3, 'prop1', value1, 'prop2', value2, ...);
grid minor;
axis(ax, [xmin xmax ymin ymax]);
legend(ax, ...);
xlabel(ax, ...);
ylabel(ax, ...);
title(ax, ...);

Сега изпълнявам цикъл, където само стойностите на y се актуализират.

for k = 1 : N
% y changes, update the axis
end

Кой е най-бързият и лесен начин за актуализиране на оста с нови y (или x и y), запазвайки всички свойства на оста?


person Serg    schedule 25.04.2012    source източник


Отговори (2)


Бърз начин е просто да актуализирате y-стойностите на данните, които сте изчертали:

%# note: plot returns the handle to the line, not the axes
%# ax = gca returns the handle to the axes
lineHandle = plot(x, y, 'linewidth', 3, 'prop1', value1, 'prop2', value2, ...);

%# in the loop
set(lineHandle,'ydata',newYdata)

РЕДАКТИРАНЕ Ами ако има няколко реда, т.е. lineHandle е вектор? Все още можете да актуализирате в една стъпка; трябва обаче да конвертирате данните в клетъчен масив.

%# make a plot with random data
lineHandle = plot(rand(12));

%# create new data
newYdata = randn(12);
newYcell = mat2cell(newYdata,12,ones(1,12));

%# set new y-data. Make sure that there is a row in 
%# newYcell for each element in lineH (i.e. that it is a n-by-1 vector
set(lineHandle,{'ydata'},newYcell(:) );
person Jonas    schedule 25.04.2012
comment
Благодаря, Джонас. Работи. Между другото, ако y е матрица, тогава lineHandle е вектор, така че извиквам set(lineHandle(i),'ydata',newYdata(:,i)) за всяка колона, нали? Или има трик за актуализиране на всички колони на y наведнъж? - person Serg; 25.04.2012

Просто предайте манипулатора на оста обратно към следващите команди за чертане

i.e.

plot(ax, ...)

отколкото

ax = plot(...)
person learnvst    schedule 25.04.2012
comment
съжалявам, learnvst, но не работи. plot(ax, ...) премахва всички свойства на оста - person Serg; 25.04.2012
comment
@Serg: Ако извикате hold all преди следващата команда за чертеж, ще запазите свойствата на старите оси, но също и старата линия. - person Jonas; 25.04.2012
comment
@Jonas: Знам, но не искам да запазя старата линия. - person Serg; 26.04.2012