2012-08-28 18 views
5

Tôi đang sử dụng một vòng lặp để tạo ra các trường vectơ trên một bản đồ cơ sở như vậy:sử dụng rung động matplotlib trong một vòng lặp một cách hiệu quả

for i in range(365): 
    barbs = m.quiver(x, y, u[i, :], v[i, :], scale = 100) 
    plt.draw() 
    barbs.remove() 

Chương trình diễn bộ nhớ mạnh hơn với mỗi vòng lặp. Có cách nào để giải quyết vấn đề này không? Chẳng hạn như xóa hoàn toàn barbs ở cuối mỗi vòng lặp?

+0

Tại sao bạn vẽ chúng và sau đó xóa chúng? Một cách để tăng tốc các ô là xây dựng chúng trước, sau đó gọi vẽ ở cuối, với chế độ tương tác được đặt thành tắt, bằng cách gọi ioff(). Bạn là ví dụ là xa này, nhưng bởi vì nó không đầy đủ, thật khó để đoán những gì bạn muốn. – tom10

Trả lời

4

Nếu bạn chỉ cần đặt lại các thành phần (u, v), bạn có thể sử dụng barb.set_UVC(newU,newV,newC) bên trong vòng lặp.

barbs = m.quiver(x, y, u[0, :], v[0, :], scale = 100) 
for i in range(365): 
    barbs.set_UVC(u[i,:],v[i,:]) 
    #save the figure or something 

Xem thêm Python: copy basemap or remove data from figure, Visualization of 3D-numpy-array frame by frame,

Nếu bạn đang cố gắng để tạo ra một hình ảnh động, nhìn vào mô-đun animation của matplotlib, nó sẽ chăm sóc của rất nhiều các chi tiết cho bạn.

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