Що в Matplotlib що означає аргумент у fig.add_subplot (111)?


472

Іноді я натрапляю на такий код:

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()

Що виробляє:

Приклад сюжету, що складається з включеного коду

Я читав документацію як божевільний, але не можу знайти пояснення 111. іноді я бачу а 212.

Що означає аргумент fig.add_subplot()?

Відповіді:


470

Це параметри сітки субплоти, кодовані як одне ціле число. Наприклад, "111" означає "1х1 сітка, перший субплот", а "234" означає "2х3 сітка, 4-а субплот".

Альтернативна форма для add_subplot(111)є add_subplot(1, 1, 1).


18
Чи є якась детальна документація з цього приводу? Яка різниця між сіткою 1x1 та сіткою 2x3 у цьому контексті?
donatello

19
1х1 сітка = 1 ряд, 1 стовпчик. 2х3 сітка = 2 ряди, 3 стовпчики. Третє число починається з 1 і з кроком першого рядка. Для отримання додаткової інформації див документацію subplot ().
Крістіан Аліс

18
Як пояснили інші (більше двох років тому), це спадщина з matlab. Але заради майбутніх читачів ви повинні знати, що існує краща альтернатива у вигляді subplots()методу.
jarondl

26
Документація спадщини subplot()є тут і subplots()є тут .
crayzeewulf

511

Я думаю, що це найкраще пояснити наступною картиною:

введіть тут опис зображення

Щоб ініціалізувати вищезазначене, слід ввести:

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()

19
Я думаю, що версія з комами набагато інтуїтивніша і легша для читання, ніж версія з тризначними цифрами
ендоліт

Це чудово, що це показує, як "розташувати субплоти в сітці", щоб сітка 2x2, як показано вище, ілюстрований приклад, або сітка 4х4 графіків і т.д. Значення за замовчуванням для (2,2,1) я вважаю зовсім невеликим, я б хотів, щоб він вдвічі перевищував цей розмір або більше.
yoshiserry

7
Це дуже корисно. Ця картинка була б трохи приємнішою, якби вона не була квадратною (2х2), але в іншому випадку дуже корисною.
TravisJ

@TravisJ Ого, який збіг! Я думав саме те саме за годину до того, як ти це написав! Я скоро його зміню :)
SaiyanGirl

7
Дуже корисна відповідь! Хоча я думаю, що редакція є неточною. Математика (принаймні, не в 1.5.0) не підтримується Matplotlib (як мінімум, не ), а поведінка, що охоплює субплоти, з такими твердженнями, як 1: 2 або [1 3] , і, здається, є лише Matlab. (Зверніть увагу, що в Matplotlib є інші варіанти для досягнення такої поведінки, наприклад, gridspec )
лабораторія

39

Відповідь від Константина не вдається, але для більшої інформації ця поведінка успадкована від Matlab.

Поведінка Matlab пояснюється в Настройці рисунка - Відображення декількох графіків на рисунок розділу документації Matlab.

subplot (m, n, i) розбиває вікно фігури на m-by-n матрицю малих субплоттів і вибирає ithe subplot для поточної ділянки. Сюжети нумеруються уздовж верхнього ряду вікна рисунка, потім другого ряду тощо.


2
Це матплотліб, а не матлаб.
dom0

45
Значна частина поведінки matplotlibs успадкована від Matlab. Оскільки документація щодо Matlab була кращою, я подумав, що це може допомогти пояснити, як поводиться цей виклик функції. Так, ви правильно, це (питання) стосується matplotlib. На мою думку, документація субплоту matplotlib менш чітка.
DaveTM

7
Документація MATLAB переміщена .
dotancohen

20

Моє рішення таке

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()

2х2 сітка з 1 і 3 злиття


15

введіть тут опис зображення

import matplotlib.pyplot as plt
plt.figure(figsize=(8,8))
plt.subplot(3,2,1)
plt.subplot(3,2,3)
plt.subplot(3,2,5)
plt.subplot(2,2,2)
plt.subplot(2,2,4)

Перший код створює перший субплот у макеті, який має 3 ряди та 2 стовпчики.

Три графіки в першому стовпчику позначають 3 ряди. Другий сюжет знаходиться трохи нижче першого сюжету в тій самій колонці тощо.

Останні два графіки мають аргументи, (2, 2)що позначають, що другий стовпець має лише два рядки, параметри позиції переміщуються в рядку.


10

fig.add_subplot(ROW,COLUMN,POSITION)

  • ROW = кількість рядків
  • COLUMN = кількість стовпців
  • ПОЗИЦІЯ = положення графіку, який ви будуєте

Приклади

`fig.add_subplot(111)` #There is only one subplot or graph  
`fig.add_subplot(211)`  *and*  `fig.add_subplot(212)` 

Усього 2 рядки, 1 стовпець, тому можна скласти 2 підграфа. Місце його розташування - 1-е. Всього 2 рядки, 1 стовпець, тому 2 підграфа можуть бути накреслені


2

Add_subplot () має кілька підписів викликів:

  1. add_subplot(nrows, ncols, index, **kwargs)
  2. add_subplot(pos, **kwargs)
  3. add_subplot(ax)
  4. add_subplot() <- з 3.1.0

Дзвінки 1 і 2:

Дзвінки 1 і 2 досягають того ж, що й один до одного (до межі, поясненої нижче). Подумайте про них, як спочатку вказавши макет сітки з їх першими 2 номерами (2x2, 1x8, 3x4 тощо), наприклад:

f.add_subplot(3,4,1) 
# is equivalent to:
f.add_subplot(341)

Обидва виробляють підгрупу розташування підгруп (3 х 4 = 12) субплоттів у 3 ряди та 4 колонки. TheТретє число в кожному виклику вказує , який осі об'єкта повернення, починаючи з 1 у верхньому лівому кутку , збільшуючи вправо .

Цей код ілюструє обмеження використання виклику 2:

#!/usr/bin/env python3
import matplotlib.pyplot as plt

def plot_and_text(axis, text):
  '''Simple function to add a straight line
  and text to an axis object'''
  axis.plot([0,1],[0,1])
  axis.text(0.02, 0.9, text)

f = plt.figure()
f2 = plt.figure()

_max = 12
for i in range(_max):
  axis = f.add_subplot(3,4,i+1, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
  plot_and_text(axis,chr(i+97) + ') ' + '3,4,' +str(i+1))

  # If this check isn't in place, a 
  # ValueError: num must be 1 <= num <= 15, not 0 is raised
  if i < 9:
    axis = f2.add_subplot(341+i, fc=(0,0,0,i/(_max*2)), xticks=[], yticks=[])
    plot_and_text(axis,chr(i+97) + ') ' + str(341+i))

f.tight_layout()
f2.tight_layout()
plt.show()

субплоти

Ви можете бачити с виклику 1 на LHS, що ви можете повернути будь-який об'єкт осі, однак за допомогою виклику 2 на RHS ви можете повернутися до індексу = 9 субплотів j), k) та l) недоступним за допомогою цього виклику.

Тобто це ілюструє цей пункт із документації:

pos - трицифрове ціле число, де перша цифра - це кількість рядків, друга - кількість стовпців, а третя - індекс підмножини. тобто fig.add_subplot (235) - те саме, що fig.add_subplot (2, 3, 5). Зауважте, що для роботи цієї форми всі цілі числа повинні бути менше 10 .


Дзвінок 3

У рідкісних обставинах add_subplot може бути викликаний одним аргументом, екземпляром осей subplot, вже створеним на цій фігурі, але не в списку осей фігури.


Виклик 4 (з 3.1.0):

Якщо позиційних аргументів не передано, за замовчуванням (1, 1, 1).

тобто відтворення дзвінка fig.add_subplot(111)у питанні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.