J'utilise python + matplotlib et deux parcelles partagent un axe. Si vous essayez de définir graph1.set_xticklabels([])
lors du partage d'un axe, cela n'aura aucun effet car il est partagé. Existe-t-il un moyen de partager l’axe ET de pouvoir masquer l’axe x d’un tracé?
Ceci est un piège commun lors de l'utilisation d'axes partagés.
Heureusement, il existe une solution simple: utilisez plt.setp(ax.get_xticklabels(), visible=False)
pour rendre les étiquettes invisibles sur un seul axe.
Ceci équivaut à [label.set_visible(False) for label in ax.get_xticklabels()]
, peu importe ce que cela vaut. setp
fonctionnera automatiquement sur un objet itérable matplotlib, ainsi que sur des objets individuels.
Par exemple:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), 'b-')
ax2 = fig.add_subplot(2,1,2, sharex=ax1)
ax2.plot(range(10), 'r-')
plt.setp(ax1.get_xticklabels(), visible=False)
plt.show()
Par un fil sur matplotlib-users , vous pouvez utiliser
import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
try:
ax.label_outer()
except:
pass
Vous pouvez utiliser Axes.tick_params () :
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, sharex=ax1)
ax1.tick_params(labelbottom=False)
Vous pouvez partager les axes lors de la création d’une sous-parcelle avec plt.subplots
as
fig, axes = plt.subplots(nrows=2, sharex=True)
Cela désactivera automatiquement les étiquettes de contrôle des axes internes.
Exemple complet:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, sharex=True)
axes[0].plot([1,2,3])
axes[1].plot([3,2,1])
plt.show()
Malheureusement, je n'ai pas le droit de commenter la réponse d'esmit (qui est la meilleure solution à mon avis, merci esmit), je dois donc écrire mon commentaire comme une nouvelle réponse: j'ai mis sa solution dans une fonction simple
def remove_inner_ticklabels(fig):
for ax in fig.axes:
try:
ax.label_outer()
except:
pass
que vous pouvez appeler avant plt.show()
. La réponse de Joe Kington n'a pas fonctionné pour moi pour une raison quelconque.