2012-06-05 39 views
6

Tôi mới sử dụng matplotlib. Tôi có một danh sách các tọa độ x-y mà tôi cập nhật trong python và muốn tạo hiệu ứng động bằng cách sử dụng pyplot của matplotlib. Tôi muốn xác định trước phạm vi x và y. Dưới đây là mã hiện tại của tôi:Hoạt ảnh đơn giản của tọa độ 2D sử dụng matplotlib và pyplot

import matplotlib.pyplot as plt 
x=[1,2,3,4] 
y=[5,6,7,8] 
for t in range(100): 
    #lists x and y get updated here 
    #... 
plt.plot(x, y, marker='o', linestyle='None') 
plt.show() 

Như bạn thấy, tôi sử dụng plt.plot()plt.show()ở phần cuối của vòng lặp của tôi để vẽ chỉ có tọa độ chính thức. Nhưng tôi muốn đặt bước này bên trong vòng lặp và lô tại mọi lần lặp lại với thời gian tạm dừng được chỉ định để tôi có hoạt ảnh khi vòng lặp chạy.

Chỉ cần di chuyển câu lệnh đó bên trong vòng lặp hoặc chỉnh sửa nội dung không hoạt động. Tôi muốn giữ nó rất đơn giản, và không muốn sử dụng matplotlib.animation. Có một số phương pháp đơn giản mà không cần sử dụng nhiều mô-đun và thư viện hơn (chỉ những thứ như plt.pause() và có lẽ chỉ một chút nữa) mà sẽ cho phép tôi làm những gì tôi muốn?

Tôi đã xem nhiều địa điểm trực tuyến và vấn đề tôi phải đối mặt với hầu hết các phương pháp là tôi đang sử dụng python (x, y) (phiên bản python 2.7) trên Windows và hoạt ảnh bằng các mô-đun và thư viện quá phức tạp đang rơi ở đây.

Tuy nhiên, tôi có thể chạy các công cụ đơn giản như this example trên trang web matplotlib, gần với những gì tôi muốn nhưng không hoàn toàn. Vì vậy, có lẽ điều tốt nhất sẽ là một sửa đổi của ví dụ này làm việc cho trường hợp của tôi về dữ liệu 2D (ví dụ đó là cho một hàng 1D). Nhưng bất kỳ đề xuất nào khác đều được chào đón.

Trả lời

8

này được chuyển thể từ animation demo:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 

x = [1, 2, 3, 4] 
y = [5, 6, 7, 8] 

for t in range(10): 
    if t == 0: 
     points, = ax.plot(x, y, marker='o', linestyle='None') 
     ax.set_xlim(0, 10) 
     ax.set_ylim(0, 10) 
    else: 
     new_x = np.random.randint(10, size=5) 
     new_y = np.random.randint(10, size=5) 
     points.set_data(new_x, new_y) 
    plt.pause(0.5) 

Trong khi điều này là đơn giản docstring nói rằng đó là chậm.

+0

+1. Những công việc này. Tôi sẽ cố gắng điều chỉnh nó vào chương trình cuối cùng của tôi và xem nó như thế nào. –

+0

Điều đó hiệu quả với chương trình của tôi. Đã chấp nhận. Và cảm ơn! –

+0

Có thể thuận tiện khi sử dụng 'ax.clear()'; sau đó bạn chỉ cần vẽ một hình mới và bạn không cần phải phân biệt giữa lần chạy đầu tiên và sau đó. Ngoài ra, 'plt.pause()' gây ra lỗi cho tôi, tôi đã sử dụng 'fig.canvas.start_event_loop()' để thay thế. – Scipio

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