Masquage du texte de l'axe dans les tracés matplotlib

J'essaie de tracer une figure sans repères ou chiffres sur l'un ou l'autre des axes (j'utilise des axes au sens traditionnel, pas la nomenclature matplotlib!). Un problème que j'ai rencontré est où matplotlib ajuste les ticklabels x(y)en soustrayant une valeur N, puis ajoute N à la fin de l'axe.

Cela peut être vague, mais l'exemple simplifié suivant met en évidence le problème, avec '6.18' étant la valeur incriminée de N:

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

Les trois choses que je voudrais savoir sont:

  1. Comment désactiver ce comportement en premier lieu (bien que dans la plupart des cas, il est utile, il est pas toujours!) J'ai regardé à travers matplotlib.axis.XAxis et ne trouve rien d'approprié

  2. Comment puis-je faire N disparaître (c'est à dire X.set_visible(False))

  3. Y a-t-il une meilleure façon de faire ce qui précède de toute façon? Mon intrigue finale serait des sous-parcelles 4x4 dans une figure, si cela est pertinent.

252
demandé sur Chris 2010-02-01 14:56:52

5 réponses

Au lieu de masquer chaque élément, vous pouvez masquer l'axe entier:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

Ou, vous pouvez définir les tiques sur une liste vide:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

Dans cette deuxième option, vous pouvez toujours utiliser plt.xlabel() et plt.ylabel() pour ajouter des étiquettes pour les axes.

330
répondu Ofri Raviv 2018-04-26 15:55:18

Si vous voulez masquer uniquement le texte de l'axe en gardant les lignes de la grille:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

Faire set_visible(False) ou set_ticks([]) masquera également les lignes de la grille.

165
répondu Saullo G. P. Castro 2017-10-03 09:49:19

Si vous êtes comme moi et ne récupérez pas toujours les axes, ax, lors du tracé de la figure, alors une solution simple serait de faire

plt.xticks([])
plt.yticks([])
69
répondu Ébe Isaac 2017-08-07 09:43:28

Un peu d'un vieux thread mais, cela semble être une méthode plus rapide en utilisant la dernière version de matplotlib:

Définit le formateur principal pour l'axe x

ax.xaxis.set_major_formatter(plt.NullFormatter())
41
répondu Nik Twerdochlib 2015-01-28 17:16:57

Je n'étais pas réellement capable de rendre une image Sans bordures ou données d'axe basées sur l'un des extraits de code ici (même celui accepté à la réponse). Après avoir fouillé dans la documentation de L'API, j'ai atterri sur ce code pour rendre mon image

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

J'ai utilisé l'appel tick_params pour fermer fondamentalement toute information supplémentaire qui pourrait être rendue et j'ai un graphique parfait dans mon fichier de sortie :). Espérons que cette aide!

16
répondu GingerLoaf 2016-11-12 01:36:58