2012-06-11 39 views
24

Tôi đang vẽ dữ liệu bằng Python bằng matplotlib. Tôi đang cập nhật dữ liệu của cốt truyện dựa trên một số tính toán và muốn ylim và xlim được thay đổi kích thước tự động. Thay vào đó những gì xảy ra là quy mô được thiết lập dựa trên các giới hạn của cốt truyện ban đầu. MWE làTự động rescale ylim và xlim trong Matplotlib

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 
    pyplot.draw() 

Lệnh lô đầu tiên tạo lô từ [0,1] và tôi có thể thấy mọi thứ đều tốt. Cuối cùng, mảng dữ liệu y chuyển từ [0,10) với hầu hết nó lớn hơn 1, nhưng giới hạn y của hình vẫn là [0,1].

Tôi biết tôi có thể thay đổi giới hạn bằng cách sử dụng pyplot.ylim(...) theo cách thủ công, nhưng tôi không biết phải thay đổi điều gì. Trong vòng lặp for, tôi có thể nói pyplot để mở rộng giới hạn như thể đây là lần đầu tiên được vẽ đồ thị?

+2

Xem hai câu trả lời liên quan: http://stackoverflow.com/a/3215060/623518 và http://stackoverflow.com/a/7198623/623518 – Chris

Trả lời

34

Bạn sẽ cần phải cập nhật dataLim của trục, sau đó cập nhật viewLim của trục dựa trên dataLim. Các phương thức approrpiate là phương thức axes.relim() và ax.autoscale_view(). dụ của bạn sau đó trông giống như:

import random 
import matplotlib.pyplot as pyplot 

pyplot.ion() 

x = range(10) 
y = lambda m: [m*random.random() for i in range(10)] 

pLine, = pyplot.plot(x, y(1)) 

for i in range(10): 
    pLine.set_ydata(y(i+1)) 

ax = pyplot.gca() 

# recompute the ax.dataLim 
ax.relim() 
# update ax.viewLim using the new dataLim 
ax.autoscale_view() 
pyplot.draw() 
+7

Lưu ý rằng nếu bạn đã sử dụng 'set_xlim()' trên cùng các trục trước, 'autoscale_view()' sẽ KHÔNG hoạt động. Trong trường hợp này, 'autoscale()' nên được sử dụng thay thế (thử nghiệm trên 1.5.x). –

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