2015-07-18 11 views
6

bạn chắc chắn biết cách nhanh chóng để tôi có thể theo dõi các giới hạn của hình sau khi đã phóng to? Tôi muốn biết các tọa độ chính xác để tôi có thể tái tạo hình với ax.set_xlimax.set_ylim. Tôi đang sử dụng chương trình phụ trợ qt4agg tiêu chuẩn.Matplotlib: Tìm hiểu xlim và ylim sau khi zoom

chỉnh sửa: Tôi biết tôi có thể sử dụng con trỏ để tìm ra hai vị trí ở góc dưới và góc trên, nhưng có thể có cách chính thức để thực hiện điều đó?

+0

Bạn có thể sử dụng 'ax.get_xlim' và 'ax.set_ylim' để lấy các giới hạn. – hitzg

Trả lời

16

matplotlib có API xử lý sự kiện mà bạn có thể sử dụng để kết nối với các hành động như những gì bạn đang đề cập đến. Trang Event Handling cung cấp tổng quan về API sự kiện và có một đề cập ngắn gọn về các sự kiện x và y giới hạn trên trang Axes.

Trong trường hợp của bạn, bạn muốn đăng ký chức năng gọi lại trên các sự kiện xlim_changedylim_changed của đối tượng. Các chức năng này sẽ được gọi bất cứ khi nào người dùng phóng to hoặc thay đổi chế độ xem.

Dưới đây là một ví dụ làm việc tối thiểu:

import matplotlib.pyplot as plt 

# 
# Some toy data 
x_seq = [x/100.0 for x in xrange(1, 100)] 
y_seq = [x**2 for x in x_seq] 

# 
# Scatter plot 
fig, ax = plt.subplots(1, 1) 
ax.scatter(x_seq, y_seq) 

# 
# Declare and register callbacks 
def on_xlims_change(axes): 
    print "updated xlims: ", ax.get_xlim() 

def on_ylims_change(axes): 
    print "updated ylims: ", ax.get_ylim() 

ax.callbacks.connect('xlim_changed', on_xlims_change) 
ax.callbacks.connect('ylim_changed', on_ylims_change) 

# 
# Show 
plt.show() 
+0

Ví dụ này không hoạt động đối với Python 3. Ngay cả khi 'print's và' xrange' được sửa, 'axes.get_xlim()' không tạo ra giá trị. – eatcrayons

+1

@eatcrayons Đó là chính xác, bởi vì 'trục' không được xác định; nó cần phải là 'ax.get_xlim()' - tôi đã chỉnh sửa câu trả lời. – ImportanceOfBeingErnest

0
print ax.get_xlim(), ax.get_ylim() 
+1

Điều này có lẽ không phải là những gì OP đã hỏi; theo kinh nghiệm của tôi, các hàm này trả về các giới hạn được đưa ra bởi set_xlim(), nhưng không biết gì về chế độ xem mà người dùng đã panned/zoom sau đó theo cách thủ công. – dominecf

+1

Vậy tại sao câu trả lời được chấp nhận lại hoạt động? Nó cũng sử dụng '.get_xlim'. –

+1

Có câu trả lời này đúng theo nghĩa là 'ax.get_xlim()' sẽ trả về giới hạn hiện tại của ô tại bất kỳ thời điểm nào, ngay cả sau khi phóng to. Vì vậy, nếu một người có thể tương tác với hình và gọi lệnh đó tương tác, ví dụ: trong một phiên IPython, điều này hoạt động tốt. Nếu cốt truyện được tạo ra bởi một kịch bản, bạn thường không có tùy chọn này; trong trường hợp đó, câu trả lời khác cho thấy cách sử dụng các sự kiện cần thiết để có thể in các giới hạn. – ImportanceOfBeingErnest

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