Supprimer les xticks dans un tracé matplotlib?

290

J'ai un tracé semilogx et je voudrais supprimer les xticks. J'ai essayé:

plt.gca().set_xticks([])
plt.xticks([])
ax.set_xticks([])

La grille disparaît (ok), mais de petites tiques (à la place des tiques principales) restent. Comment les supprimer?

Vincent
la source
Certaines des solutions n'ont pas fonctionné pour moi. Mais juste un petit changement des exemples ici: ax.set_xticks([], [])et c'est résolu ...
TravelTrader

Réponses:

464

La tick_paramsméthode est très utile pour des trucs comme ça. Ce code désactive les graduations majeures et mineures et supprime les étiquettes de l'axe des x.

from matplotlib import pyplot as plt
plt.plot(range(10))
plt.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom=False,      # ticks along the bottom edge are off
    top=False,         # ticks along the top edge are off
    labelbottom=False) # labels along the bottom edge are off
plt.show()
plt.savefig('plot')
plt.clf()

entrez la description de l'image ici

John Vinyard
la source
87
J'apprécie comment cela répond non seulement à la question mais fournit un modèle pour activer / désactiver plusieurs choses. Ceci applique le résultat aux axes x et y:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell
2
Et si c'est un tracé 3D?
tommy.carstensen
38
C'est une excellente réponse. Pour ceux qui recherchent la version oo, axesa la même tick_paramsméthode.
Mad Physicist
22
Dans les versions plus récentes de matplotlib, vous devez remplacer 'on'par Trueet 'off'par False.
BallpointBen
1
La réponse doit être mise à jour pour l'interface OOP et la syntaxe de version la plus récente.
ifly6
143

Pas exactement ce que l'OP demandait, mais un moyen simple de désactiver toutes les lignes, graduations et étiquettes des axes consiste à simplement appeler:

plt.axis('off')
Martin Spacek
la source
26
Ce dont j'avais besoin merci. La version orientée objet serait ax.axis('off')sur une instance d'axes existante.
PlasmaBinturong
5
comment pour seulement xaxis?
qrtLs
83

Alternativement, vous pouvez passer une position de coche vide et étiqueter comme

# for matplotlib.pyplot
# ---------------------
plt.xticks([], [])
# for axis object
# ---------------
# from Anakhand May 5 at 13:08
# for major ticks
ax.set_xticks([])
# for minor ticks
ax.set_xticks([], minor=True)
hashmuke
la source
8
Si vous avez une instance d'axe existante, par exemple ax, vous pouvez utiliser:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé, cela déclenche désormais un avertissement: "Passer le paramètre mineur de set_xticks () est déconseillé depuis Matplotlib 3.2; le paramètre ne deviendra mot-clé que deux versions mineures plus tard." Quelle est la bonne solution maintenant?
Rylan Schaeffer
2
@RylanSchaeffer ax.set_xticks([])pour les tiques majeures, ax.set_xticks([], minor=True)pour les tiques mineures. Les équivalents avec pyplotsont plt.xticks([])et plt.xticks([], minor=True).
Anakhand
68

Voici une solution alternative que j'ai trouvée sur la liste de diffusion matplotlib :

import matplotlib.pylab as plt

x = range(1000)
ax = plt.axes()
ax.semilogx(x, x)
ax.xaxis.set_ticks_position('none') 

graphique

Tom Phillips
la source
42

Il existe une solution meilleure et plus simple que celle proposée par John Vinyard. Utilisation NullLocator:

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.show()
plt.savefig('plot')

J'espère que cela pourra aider.

dmcdougall
la source
22
"Mieux" est discutable, mais +1 pour l'alternative.
mechanical_meat
Une variante de cette solution a également fonctionné pour moi lorsque l'objectif était de supprimer uniquement les xticks d'un encart "zoomé", tout en les conservant dans l'intrigue principale. En utilisant axins.xaxis.set_major_locator(plt.NullLocator()), où axinsest l'objet renvoyé par axins = zoomed_inset_axes()(fonction importée de mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers
28

Essayez ceci pour supprimer les étiquettes (mais pas les tiques):

import matplotlib.pyplot as plt

plt.setp( ax.get_xticklabels(), visible=False)

exemple

auraham
la source
3
setpest en mode Pylab, ne peut pas être utilisé contre des axes individuels
Dashesy
1
Que diriez-vous de l'interface orientée objet?
ifly6
Ce fut la seule réponse qui a également fonctionné pour les tracés 3D pour moi. Merci pour cela!
Brent
13

Cet extrait peut aider à supprimer uniquement les xticks.

from matplotlib import pyplot as plt    
plt.xticks([])

Cet extrait peut aider à supprimer les xticks et les yticks à la fois.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Amitrajit Bose
la source
3
# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
Nishant Wattamwar
la source
2
La version orientée objet de ceci estax.tick_params()
Marcelo Villa-Piñeros
1
En outre, l'utilisation de offet onest déconseillée. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
Marcelo Villa-Piñeros
0

Ceux d'entre vous qui recherchent une commande courte pour désactiver tous les ticks et étiquettes devraient

plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)

qui permet le type boolpour les paramètres respectifs depuis la version matplotlib> = 2.1.1

Pour les paramètres de coche personnalisés, les documents sont utiles:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.tick_params.html

hahnec
la source