2010-11-03 38 views
8

chính xác làm thế nào để bạn có được tỉ lệ cố định của trục trong âm mưu Matlab khi vẽ bên trong một vòng lặp? Mục tiêu của tôi là xem dữ liệu đang tiến hóa như thế nào bên trong vòng lặp. Tôi đã thử sử dụng axis manualaxis(...) mà không có may mắn. Bất kỳ đề xuất?Trục Matlab nhân rộng

Tôi biết hold on thực hiện thủ thuật, nhưng tôi không muốn thấy dữ liệu cũ.

+2

Bạn cũng có thể muốn đọc về tính năng không có giấy tờ 'LimInclude': http://undocumentedmatlab.com/blog/plot-liminclude-properties/ – Amro

Trả lời

6

Nếu bạn muốn xem dữ liệu mới vẽ của bạn thay thế các dữ liệu vẽ trên biểu đồ cũ, nhưng duy trì các trục giới hạn tương tự, bạn có thể cập nhật các giá trị x và y của dữ liệu được vẽ bằng cách sử dụng lệnh SET trong vòng lặp của bạn. Dưới đây là một ví dụ đơn giản:

hAxes = axes;      %# Create a set of axes 
hData = plot(hAxes,nan,nan,'*'); %# Initialize a plot object (NaN values will 
            %# keep it from being displayed for now) 
axis(hAxes,[0 2 0 4]);   %# Fix your axes limits, with x going from 0 
            %# to 2 and y going from 0 to 4 
for iLoop = 1:200     %# Loop 100 times 
    set(hData,'XData',2*rand,... %# Set the XData and YData of your plot object 
      'YData',4*rand);  %# to random values in the axes range 
    drawnow       %# Force the graphics to update 
end 

Khi bạn chạy ở trên, bạn sẽ thấy một dấu hoa thị xung quanh trục trong một vài giây, nhưng giới hạn trục sẽ vẫn cố định. Bạn không cần phải sử dụng lệnh HOLD vì bạn chỉ đang cập nhật đối tượng lô hiện có, chứ không phải thêm đối tượng lô mới. Ngay cả khi dữ liệu mới vượt quá giới hạn trục, giới hạn sẽ không thay đổi.

+4

+1 Tôi cũng có một vài gợi ý: 1) để tránh nhấp nháy, bạn nên kích hoạt bộ đệm đôi 'set (gcf, 'DoubleBuffer', 'on')'. 2) nếu bạn muốn tăng tốc độ vẽ và có được một hình động mượt mà hơn, hãy đặt thuộc tính 'EraseMode' thành một cái gì đó khác với 'bình thường' (tôi sẽ sử dụng' xor' trong trường hợp này). Tất nhiên bạn sẽ phải sử dụng các chức năng cấp thấp như dòng, bản vá, văn bản, v.v. Hãy xem hướng dẫn này để biết thêm chi tiết: http://www.mathworks.com/support/tech-notes/1200/1204. html # Phần% 2023 – Amro

1

Bạn phải đặt giới hạn trục; lý tưởng bạn làm điều đó trước khi bắt đầu vòng lặp.

này sẽ không hoạt

x=1:10;y=ones(size(x)); %# create some data 
figure,hold on,ah=gca; %# make figure, set hold state to on 
for i=1:5, 
    %# use plot with axis handle 
    %# so that it always plots into the right figure 
    plot(ah,x+i,y*i); 
end 

này sẽ làm việc

x=1:10;y=ones(size(x)); %# create some data 
figure,hold on,ah=gca; %# make figure, set hold state to on 
xlim([0,10]),ylim([0,6]) %# set the limits before you start plotting 
for i=1:5, 
    %# use plot with axis handle 
    %# so that it always plots into the right figure 
    plot(ah,x+i,y*i); 
end 
Các vấn đề liên quan