2011-08-18 35 views
15

Vì vậy, trong một figure nơi ba subplots dọc đã được thêm vào với add_subplot, làm thế nào tôi có thể chọn chúng ta hãy nói giữa?Làm thế nào tôi có thể lập trình chọn một subplot cụ thể trong Matplotlib?

Ngay bây giờ tôi làm danh sách này hiểu:

[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]

nơi tôi chỉ có thể chọn chỉ số tôi muốn, với sự tương ứng axes. Có cách nào đơn giản hơn để làm việc này không?

Trả lời

14

Từ matplotlib documentation:

Nếu con số này đã có một âm mưu phụ với chìa khóa (args, kwargs) sau đó nó sẽ chỉ cần thực hiện âm mưu phụ rằng hiện tại và gửi lại.

Dưới đây là một ví dụ:

import matplotlib.pyplot as plt 

fig = plt.figure() 
for vplot in [1,2,3]: 
    ax = fig.add_subplot(3,1,vplot) 
    ax.plot(range(10),range(10)) 

ax_again = fig.add_subplot(3,1,2) 
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5)) 

plt.show() 

Cốt truyện giữa được gọi là một lần nữa để nó có thể được chú thích.

Nếu tôi đặt nền với cuộc gọi ban đầu, tôi có cần đặt lại khi tôi nhận phụ đề lần thứ hai không?

Có. Các đối số và từ khóa cho cuộc gọi ban đầu được sử dụng để tạo một số nhận dạng duy nhất. Vì vậy, để con số để tạo ra định danh duy nhất này một lần nữa, bạn cần phải vượt qua các đối số tương tự (định nghĩa lưới, vị trí) và từ khóa một lần nữa. Ví dụ:

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(2,1,1,axisbg='red') 
ax.plot(range(10),range(10)) 
ax = fig.add_subplot(2,1,2) 
ax.plot(range(10),range(10)) 

ax_again = fig.add_subplot(2,1,1,axisbg='red') 
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5)) 

plt.show() 

gì nếu tôi sử dụngax_again.change_geometry()?

Bạn sẽ nghĩ change_geometry, ví dụ: từ 312 đến 422, sẽ thay đổi cách bạn sử dụng add_subplot, nhưng không. Dường như có lỗi hoặc hành vi không xác định khi bạn gọi hàm change_geometry. Khóa duy nhất được tạo ban đầu bằng cách sử dụng các đối số và từ khóa, để gọi hàm add_subplot đầu tiên, không được cập nhật. Do đó, nếu bạn muốn lấy lại trục với lệnh gọi add_subplot, bạn cần gọi add_subplot với đối số và từ khóa gốc. Để biết thêm thông tin, hãy làm theo báo cáo vấn đề này: https://github.com/matplotlib/matplotlib/issues/429

Dự đoán của tôi bây giờ là nếu bạn thay đổi bất kỳ thuộc tính nào của subplot sau khi tạo cuộc gọi với add_subplot, số duy nhất sẽ không được điều chỉnh. Vì vậy, chỉ cần sử dụng các đối số và từ khóa ban đầu và hy vọng điều này sẽ hiệu quả.

+3

Tôi đã dành hàng giờ rót qua các tài liệu đó, nhưng tôi vẫn quản lý để bỏ qua phần quan trọng đó. Cảm ơn – c00kiemonster

+1

Tôi muốn tôi hiểu matplotlib trong ra ngoài. Nó chắc chắn sẽ làm cho công việc của tôi dễ dàng hơn. Phải mất một thời gian nữa, và nó chắc chắn không dễ dàng trêu chọc những chi tiết này từ các tài liệu. Tôi đang cố gắng xem bạn có vượt qua số lượng lớn trong cuộc gọi ban đầu hay không, bạn có phải truyền chúng chính xác lần thứ hai không, như các tài liệu đề xuất. Tôi sẽ cập nhật mọi thứ nếu tôi nghĩ ra bất cứ điều gì. – Yann

+1

Vì vậy, nó chỉ ra rằng các lớp hình có một chức năng thành viên tư nhân _make_key rằng '(làm cho) một khóa băm ra khỏi args và kwargs'; này được sử dụng để xác định subplot (và tôi đoán tất cả các trục thuộc về một hình). Vì vậy, có bạn cần phải sử dụng chính xác các đối số và từ khóa giống nhau. – Yann

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