2010-08-27 16 views
333

Đôi khi tôi đi qua mã như này:Trong Matplotlib, đối số có ý nghĩa gì trong fig.add_subplot (111)?

import matplotlib.pyplot as plt 
x = [1, 2, 3, 4, 5] 
y = [1, 4, 9, 16, 25] 
fig = plt.figure() 
fig.add_subplot(111) 
plt.scatter(x, y) 
plt.show() 

nào sản xuất:

Example plot produced by the included code

Tôi đã đọc các tài liệu như điên nhưng tôi không thể tìm thấy một lời giải thích cho 111 . đôi khi tôi thấy một số 212.

Đối số của fig.add_subplot() là gì?

Trả lời

325

Đây là các tham số lưới subplot được mã hóa dưới dạng một số nguyên duy nhất. Ví dụ, "111" có nghĩa là "lưới 1x1, subplot đầu tiên" và "234" có nghĩa là "lưới 2x3, subplot thứ 4".

Biểu mẫu thay thế cho add_subplot(111)add_subplot(1, 1, 1).

+14

Có bất kỳ tài liệu chi tiết về vấn đề này?Sự khác nhau giữa lưới 1x1 và lưới 2x3 trong ngữ cảnh này là gì? – donatello

+14

lưới 1x1 = 1 hàng, 1 cột. 2x3 lưới = 2 hàng, 3 cột. Số thứ ba bắt đầu từ 1 và gia số hàng-đầu tiên. Xem tài liệu về subplot() để biết thêm thông tin. – ianalis

+13

Như những người khác đã giải thích (hơn hai năm trước), đây là một di sản từ MATLAB. Nhưng vì lợi ích của người đọc trong tương lai, bạn nên biết rằng có tồn tại một sự thay thế tốt hơn, dưới dạng phương thức 'subplots()'. – jarondl

30

Câu trả lời từ Constantin là tại chỗ nhưng đối với nhiều nền tảng, hành vi này được kế thừa từ Matlab.

Hành vi Matlab được giải thích trong phần Figure Setup - Displaying Multiple Plots per Figure của tài liệu Matlab.

subplot (m, n, i) phá vỡ cửa sổ hình thành m-by-n ma trận nhỏ subplots và chọn subplot ithe cho ô hiện tại. Các ô được đánh số dọc theo hàng trên cùng của cửa sổ hình, sau đó là hàng thứ hai , v.v.

+2

Đây là matplotlib, không phải matlab. – dom0

+40

Nhiều hành vi matplotlibs được thừa hưởng từ Matlab. Vì tài liệu Matlab tốt hơn nên tôi nghĩ nó có thể giúp giải thích cách hoạt động của hàm này. Có, bạn là chính xác, điều này (câu hỏi) là liên quan đến matplotlib. [Matplotlib subplot documentation] (http://matplotlib.sourceforge.net/api/axes_api.html?highlight=axessubplot#matplotlib.axes.SubplotBase) ít rõ ràng hơn trong quan điểm của tôi. – DaveTM

+3

Điểm chụp :-) – dom0

384

Tôi nghĩ rằng điều này sẽ được giải thích tốt nhất bằng hình ảnh sau đây:

enter image description here

Để khởi tạo ở trên, người ta sẽ gõ:

import matplotlib.pyplot as plt 
fig = plt.figure() 
fig.add_subplot(221) #top left 
fig.add_subplot(222) #top right 
fig.add_subplot(223) #bottom left 
fig.add_subplot(224) #bottom right 
plt.show() 

EDIT: Một số thông tin bổ sung

Làm theo ing kết hợp sản xuất sắp xếp không đối xứng của subplots.

subplot(2,2,[1 3]) 
subplot(2,2,2) 
subplot(2,2,4) 

Example 2

Bạn cũng có thể sử dụng toán tử ruột để xác định nhiều địa điểm nếu họ theo thứ tự.

subplot(2,2,1:2) 
subplot(2,2,3) 
subplot(2,2,4) 

enter image description here

Reference here

+12

Tôi nghĩ rằng phiên bản có dấu phẩy trực quan và dễ đọc hơn phiên bản có số có 3 chữ số – endolith

+0

Điều này rất tuyệt cho thấy cách "định vị các ô con trong lưới" là lưới 2x2 như ví dụ minh họa ở trên hoặc lưới 4x4 đồ thị vv Nhưng ai đó có thể vui lòng giải thích những gì xác định kích thước của những đồ thị được hiển thị. Mặc định cho (2,2,1) tôi tìm thấy khá nhỏ tôi muốn nó có thể tăng gấp đôi kích thước hoặc nhiều hơn. – yoshiserry

+0

Vui lòng thêm ai đó thêm câu trả lời này vào tài liệu chính thức, gee ... – alwbtc

3

Giải pháp của tôi là

fig = plt.figure() 
fig.add_subplot(1, 2, 1) #top and bottom left 
fig.add_subplot(2, 2, 2) #top right 
fig.add_subplot(2, 2, 4) #bottom right 
plt.show() 

2x2 grid with 1 and 3 merge

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