web-dev-qa-db-fra.com

Comment définir xlim et ylim pour une sous-parcelle dans matplotlib

Je voudrais limiter les axes X et Y dans matplotlib mais pour une sous-parcelle spécifique. Comme je peux le voir, la sous-parcelle n'a pas de propriété d'axe. Je veux par exemple changer uniquement les limites pour la deuxième parcelle!

import matplotlib.pyplot as plt
fig=plt.subplot(131)
plt.scatter([1,2],[3,4])
fig=plt.subplot(132)
plt.scatter([10,20],[30,40])
fig=plt.subplot(133)
plt.scatter([15,23],[35,43])
plt.show()
144
Cupitor

Vous devriez apprendre un peu de l'interface OO à matplotlib, pas seulement l'interface de la machine à états. Presque toutes les fonctions _plt.*_ sont des wrappers minces qui font essentiellement gca().*.

plt.subplot renvoie un objet axes . Une fois que vous avez une référence à l'objet axes, vous pouvez y tracer directement, modifier ses limites, etc.

_import matplotlib.pyplot as plt

ax1 = plt.subplot(131)
ax1.scatter([1, 2], [3, 4])
ax1.set_xlim([0, 5])
ax1.set_ylim([0, 5])


ax2 = plt.subplot(132)
ax2.scatter([1, 2],[3, 4])
ax2.set_xlim([0, 5])
ax2.set_ylim([0, 5])
_

et ainsi de suite pour autant d'axes que vous le souhaitez.

ou mieux, enroulez le tout dans une boucle:

_import matplotlib.pyplot as plt

DATA_x = ([1, 2],
          [2, 3],
          [3, 4])

DATA_y = DATA_x[::-1]

XLIMS = [[0, 10]] * 3
YLIMS = [[0, 10]] * 3

for j, (x, y, xlim, ylim) in enumerate(Zip(DATA_x, DATA_y, XLIMS, YLIMS)):
    ax = plt.subplot(1, 3, j + 1)
    ax.scatter(x, y)
    ax.set_xlim(xlim)
    ax.set_ylim(ylim)
_
204
tacaswell