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?


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


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')

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)

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


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.


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


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([])

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')

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.