2016-03-22 24 views
3

Bir arsayı birden fazla veri satırı/eğrisi ile mümkün olduğunca hızlı güncellemek istiyorum. Ben kullanmak gibi arsa güncellenmesi için bazı yöntem gördük:Matlab güncelleme arşivi birden fazla veri satırı/eğri ile

h = plot(x,y); 
set(h,'YDataSource','y') 
set(h,'XDataSource','x') 
refreshdata(h,'caller'); 

veya çalışır tek bir eğri için

set(h,'XData',x,'YData',y); 

harika, ancak ben sadece bir değil birden çok veri eğrileri güncellemek istiyorum. Bunu nasıl yapabilirim?

+2

ayarını denediniz 'x' bir' Nx2' matris olmak? –

+0

"drawnow" işlevini kullanabilirsiniz. – obchardon

+0

Cevap @Ander Biguri için teşekkürler. Aşağıdaki kodu denedim ama bir vektöre değil, bir 2D dizisine izin veriyor gibi görünüyor. 'x (:, 1) = (1:10); x (:, 2) = (1:10); y (:, 1) = 2 x (1, 1); y (:, 2) = 5 x (2, 2); h = arsa (x, y); % x, y yeni veri sağlar. set (d1, 'XData', x, 'YData', y); ==> kümesi kullanılarak hata oluştu. Değer bir sütun veya satır vektörü olmalıdır. ' – bienle

cevap

5

Tek bir plot komutuyla birden fazla çizim nesnesi oluşturursanız, plot tarafından döndürülen tanıtıcı aslında an array of plot objects'dur (her çizim için bir tane). Bu nedenle

plots = plot(rand(2)); 
size(plots) 

    1 2 

, sen basitçe XData başka [2x2] matrisi atayamazsınız.

set(plots, 'XData', rand(2)) 

Sen aşağıdaki sözdizimi yoluyla araziler yeni Xdata bir hücre dizisi geçebileceği. Bu, yeni değerlerinizin bir hücre dizisinde zaten varsa, gerçekten kullanışlıdır. Diğer seçenekler, her arsa nesnesini yeni değerlerle ayrı ayrı güncellemektir. Bunu hızlı bir şekilde yapabildiğimiz kadarıyla, hepsi bir kerede ayarlamamış bir performans isabeti değil, çünkü MATLAB boşta kalmayacak ya da açıkça drawnow'u arayacaksınız. Gerçekten göstermiştir XDataSource ve YDataSource yöntemi kullanmak istiyorsanız

X = rand(2); 
Y = rand(2); 

for k = 1:numel(plots) 
    set(plots(k), 'XData', X(k,:), 'YData', Y(k,:)) 
end 

% Force the rendering *after* you update all data 
drawnow 

, aslında bunu yapabilirsiniz, ancak her arsa nesne için benzersiz bir veri kaynağı belirtmek gerekir.

% Do this when you create the plots 
for k = 1:numel(plots) 
    set(plots(k), 'XDataSource', sprintf('X(%d,:)', k), ... 
        'YDataSource', sprintf('Y(%d,:)', k)) 
end 

% Now update the plot data 
X = rand(2); 
Y = rand(2); 

refreshdata(plots) 
1

Sen drawnow kullanabilirsiniz:

%Creation of the vectors 

x = 1:100; 
y = rand(1,100); 

%1st plot 
h = plot(x,y); 

pause(2); 

%update y 
y = rand(1,100); 
set(h,'YData',y) 
%update the plot. 
drawnow 
İlgili konular