2013-08-22 9 views
7

Mã của tôi tạo ra một số ô từ dữ liệu bằng matplotib và tôi muốn có thể di chuyển về phía trước và ngược qua chúng trong phần trình diễn trực tiếp (có thể bằng cách bấm các phím chuyển tiếp và lùi hoặc sử dụng con chuột). Hiện tại tôi phải lưu từng ảnh dưới dạng ảnh riêng biệt và sau đó sử dụng trình xem hình ảnh riêng biệt để cuộn qua chúng. Có cách nào để làm điều này hoàn toàn từ bên trong python?Cuộn lùi và chuyển tiếp qua các ô matplotlib

+0

Thời gian cần thiết để tạo các ô sống quá lâu để bạn có thể làm điều đó không? I E. 'nhấn một nút -> tạo ra một âm mưu -> hiển thị nó' và như vậy. –

+0

@AleksanderLidtke Tôi có thể tạo chúng trực tiếp nhưng làm cách nào để cuộn tiếp và lùi qua các ô mà tôi đã tạo? – phoenix

+0

gọi lại. Xem http://matplotlib.org/users/event_handling.html. Vì nó là viết tắt câu hỏi này là quá rộng. – tacaswell

Trả lời

9

Một cách dễ dàng để đạt được điều đó được lưu trữ trong một danh sách một tuple của x và y mảng và sau đó sử dụng một sự kiện handler mà chọn các cặp tiếp theo (x, y) để được vẽ:

import numpy as np 
import matplotlib.pyplot as plt 

# define your x and y arrays to be plotted 
t = np.linspace(start=0, stop=2*np.pi, num=100) 
y1 = np.cos(t) 
y2 = np.sin(t) 
y3 = np.tan(t) 
plots = [(t,y1), (t,y2), (t,y3)] 

# now the real code :)  
curr_pos = 0 

def key_event(e): 
    global curr_pos 

    if e.key == "right": 
     curr_pos = curr_pos + 1 
    elif e.key == "left": 
     curr_pos = curr_pos - 1 
    else: 
     return 
    curr_pos = curr_pos % len(plots) 

    ax.cla() 
    ax.plot(plots[curr_pos][0], plots[curr_pos][1]) 
    fig.canvas.draw() 

fig = plt.figure() 
fig.canvas.mpl_connect('key_press_event', key_event) 
ax = fig.add_subplot(111) 
ax.plot(t,y1) 
plt.show() 

Trong mã này, tôi chọn các mũi tên rightleft để lặp lại, nhưng bạn có thể thay đổi chúng.

+0

Cảm ơn nhiều jabaldonedo --- ví dụ của bạn bây giờ là trong dự án của tôi và vì vậy tôi có thể xác nhận cho những người khác rằng nó hoạt động. Trong trường hợp của tôi 'key_event' là một đóng trong một bao đóng bên trong một trang trí. Tôi không hiểu được nguyên nhân --- vì vậy hãy giúp tôi không có dấu chấm câu sai ở cuối dòng trước --- nhưng tôi vẫn nhận được "tên chung" không được định nghĩa ", mặc dù thực tế nó được xác định rõ ràng bởi' curr_pos = 0'. Tôi đã chọn một giải pháp trong biểu mẫu 'if not hasrr (key_event, "curr_pos"): key_event.curr_pos = 0' thay cho 'global curr_pos'. Tôi sẽ sử dụng 'key_event .__ dict __ = {}' để đặt lại nếu cần. –