web-dev-qa-db-fra.com

Comment partager l’axe x de deux sous-parcelles après leur création?

J'essaie de partager deux axes de sous-parcelles, mais je dois partager un axe x après la création de la figure. Ainsi, par exemple, je crée cette figure:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
plt.plot(t,x)
ax2 = plt.subplot(212)
plt.plot(t,y)

# some code to share both x axis

plt.show()

Au lieu du commentaire, j'insérerais du code pour partager les deux axes x. Je n'ai trouvé aucune idée de comment faire cela. Il y a quelques attributs _shared_x_axes et _shared_x_axes lorsque je vérifie la représentation de l'axe (fig.get_axes()) mais je ne sais pas comment les relier.

57
ymmx

La manière habituelle de partager des axes consiste à créer les propriétés partagées à la création. Soit

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212, sharex = ax1)

ou

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)

Le partage des axes après leur création ne devrait donc pas être nécessaire.

Cependant, si pour une raison quelconque, vous devez partager les axes après leur création (en fait, utilisez une bibliothèque différente qui crée des sous-parcelles, comme ici , ou partager un axe inséré pourrait être une raison), il y aurait toujours une solution:

En utilisant

ax1.get_shared_x_axes().join(ax1, ax2)

crée un lien entre les deux axes, ax1 et ax2. Contrairement au partage au moment de la création, vous devrez désactiver manuellement les xticklabels pour l’un des axes (si vous le souhaitez).

Un exemple complet:

import numpy as np
import matplotlib.pyplot as plt

t= np.arange(1000)/100.
x = np.sin(2*np.pi*10*t)
y = np.cos(2*np.pi*10*t)

fig=plt.figure()
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)

ax1.plot(t,x)
ax2.plot(t,y)

ax1.get_shared_x_axes().join(ax1, ax2)
ax1.set_xticklabels([])
# ax2.autoscale() ## call autoscale if needed

plt.show()
78