2012-04-25 19 views
5

Tôi cần tạo phim. Giả sử, tôi tạo ra một trục và cốt truyện trên đó một cái gì đó rất tùy chỉnh:Trong trục Matlab, làm cách nào để cập nhật dữ liệu trong khi vẫn giữ tất cả các thuộc tính trục?

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

Bây giờ tôi chạy một vòng lặp, mà chỉ có các giá trị của y đang được cập nhật.

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

cách nhanh nhất và dễ nhất để cập nhật các trục với mới y (hoặc xy) là gì, giữ tất cả các thuộc tính trục?

Trả lời

6

Một cách nhanh chóng chỉ đơn giản là cập nhật các giá trị y của dữ liệu bạn đã được vẽ:

%# 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) 

EDIT Điều gì xảy ra nếu có nhiều dòng, tức là lineHandle là một vectơ? Bạn vẫn có thể cập nhật trong một bước; tuy nhiên, bạn cần chuyển đổi dữ liệu thành mảng ô.

%# 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(:)); 
+0

Cảm ơn, Jonas. Nó hoạt động. BTW, nếu y là ma trận, thì lineHandle là một vectơ, vì vậy tôi gọi set (lineHandle (i), 'ydata', newYdata (:, i)) cho mỗi cột, phải không? Hoặc có một mẹo để cập nhật tất cả các cột của y cùng một lúc? – Serg

+1

@Serg: Có, có một thủ thuật. Xem chỉnh sửa của tôi. – Jonas

+0

cảm ơn rất nhiều vì điều này. – Serg

0

Chỉ cần vượt qua tay cầm trục trở lại âm mưu tiếp theo lệnh

tức

plot(ax, ...) 

hơn

ax = plot(...) 
+0

xin lỗi, learnvst, nhưng nó không hoạt động. cốt truyện (rìu, ...) loại bỏ tất cả các thuộc tính trục – Serg

+0

@Serg: Nếu bạn gọi 'giữ tất cả' trước lệnh cốt truyện tiếp theo, bạn sẽ giữ các thuộc tính trục cũ, nhưng cũng là dòng cũ. – Jonas

+0

@ Jonas: Tôi biết, nhưng tôi không muốn giữ dòng cũ. – Serg

Các vấn đề liên quan