web-dev-qa-db-fra.com

Dans Matplotlib, que signifie l'argument dans fig.add_subplot (111)?

Parfois, je rencontre un code tel que celui-ci:

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

Qui produit:

Example plot produced by the included code

Je lis la documentation comme un fou, mais je ne trouve pas d'explication pour le 111. Parfois, je vois un 212.

Que signifie l'argument de fig.add_subplot()?

386
pleasedontbelong

Ce sont des paramètres de grille de sous-parcelle codés sous la forme d'un entier unique. Par exemple, "111" signifie "grille 1x1, première sous-parcelle" et "234" signifie "grille 2x3, 4ème sous-parcelle".

La forme alternative pour add_subplot(111) est add_subplot(1, 1, 1).

379
Constantin

Je pense que cela serait mieux expliqué par la photo suivante:

enter image description here

Pour initialiser ce qui précède, on pourrait taper:

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

La réponse de Constantin est parfaite, mais pour plus de détails, ce comportement est hérité de Matlab. 

Le comportement de Matlab est expliqué dans la section Configuration de la figure - Affichage de plusieurs tracés par figure de la documentation Matlab.

la sous-parcelle (m, n, i) divise la fenêtre de la figure en une matrice m-par-n de petite taille sous-parcelles et sélectionne la sous-parcelle pour la parcelle actuelle. Les parcelles sont numérotés le long de la rangée supérieure de la fenêtre, puis le deuxième rangée, et ainsi de suite.

34
DaveTM

Ma solution est

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

9
yoonghm

 enter image description here 

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)

Le premier code crée la première sous-parcelle dans une mise en page comportant 3 lignes et 2 colonnes.

Les trois graphiques de la première colonne indiquent les 3 lignes. La seconde parcelle se situe juste en dessous de la première parcelle dans la même colonne et ainsi de suite.

Les deux derniers graphiques ont des arguments (2, 2) indiquant que la deuxième colonne n'a que deux lignes, les paramètres de position se déplacent ligne par ligne.

3
Pritz