web-dev-qa-db-fra.com

Masquer le texte de l'axe dans les tracés matplotlib

J'essaie de tracer une figure sans graduations ni chiffres sur l'un ou l'autre des axes (j'utilise les axes dans le sens traditionnel, pas dans la nomenclature matplotlib!). Un problème que j'ai rencontré est celui 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» comme 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 soit utile mais pas toujours!), J'ai parcouru matplotlib.axis.XAxis et je ne trouve rien qui convienne

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

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

275
Dave

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 ticks 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 aux axes.

357
Ofri Raviv

Si vous souhaitez masquer uniquement le texte de l'axe en conservant 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.

176

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

plt.xticks([])
plt.yticks([])
84
Ébe Isaac

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

définir le formateur principal pour l'axe des x

ax.xaxis.set_major_formatter(plt.NullFormatter())
44
Nik Twerdochlib

Je n'ai pas été en mesure de restituer une image sans bordures ni données d'axes basée sur les extraits de code ici (même ceux acceptés dans 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 en gros toute information supplémentaire pouvant être restituée et j'ai un graphique parfait dans mon fichier de sortie.

21
GingerLoaf

Une astuce consiste à définir la couleur des étiquettes de coutil en blanc pour la masquer!

plt.xticks(color='w')
plt.yticks(color='w')
1
AI_Learning

Lorsque vous utilisez l'API orientée objet, l'objet Axes dispose de deux méthodes utiles pour supprimer le texte de l'axe, set_xticklabels() et set_xticks() .

Dites que vous créez un terrain en utilisant 

fig, ax = plt.subplots(1)
ax.plot(x, y)

Si vous voulez simplement supprimer les étiquettes de tick, vous pouvez utiliser

ax.set_xticklabels([])

ou pour éliminer complètement les tiques, vous pouvez utiliser

ax.set_xticks([])

Ces méthodes sont utiles pour spécifier exactement où vous voulez que les ticks et comment vous voulez qu'ils soient étiquetés. Passer une liste vide ne donne aucun tick, ni aucun libellé, respectivement.

1
Steven C. Howell

J'ai codé la couleur de cette figure pour faciliter le processus.

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

 enter image description here

Vous pouvez avoir un contrôle total sur la figure en utilisant ces commandes. Pour compléter la réponse, j'ai également ajouté le contrôle sur les splines:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)
1
G M