¿Eliminar xticks en un diagrama de matplotlib?

290

Tengo un diagrama de semilogx y me gustaría eliminar los xticks. Lo intenté:

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

La cuadrícula desaparece (está bien), pero quedan pequeñas marcas (en el lugar de las marcas principales). ¿Cómo eliminarlos?

Vincent
fuente
Algunas de las soluciones no me funcionaron. Pero solo un pequeño cambio de los ejemplos aquí: ax.set_xticks([], [])y está resuelto ...
TravelTrader

Respuestas:

464

El tick_paramsmétodo es muy útil para cosas como esta. Este código desactiva los ticks mayores y menores y elimina las etiquetas del eje 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()

ingrese la descripción de la imagen aquí

John Vinyard
fuente
87
Aprecio cómo esto no solo responde la pregunta, sino que proporciona una plantilla para activar / desactivar varias cosas. Esto aplica el resultado a ambos ejes x e y:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell
2
¿Qué pasa si es una trama 3D?
tommy.carstensen
38
Esta es una respuesta genial. Para aquellos que buscan la versión oo, axestiene el mismo tick_paramsmétodo.
Físico loco
22
En las versiones más recientes de matplotlib, debe reemplazar 'on'conTrue y 'off'con False.
BallpointBen
1
La respuesta debe actualizarse para la interfaz OOP y la sintaxis de la versión más reciente.
ifly6
141

No es exactamente lo que pedía el OP, pero una forma simple de deshabilitar todas las líneas, marcas y etiquetas de los ejes es simplemente llamar:

plt.axis('off')
Martin Spacek
fuente
25
Lo que necesitaba gracias. La versión orientada a objetos estaría ax.axis('off')en una instancia de ejes existente.
PlasmaBinturong
55
¿Cómo solo xaxis?
qrtLs
82

Alternativamente, puede pasar una posición de marca vacía y etiquetar como

# 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
fuente
8
Si tiene una instancia de eje existente, por ejemplo ax, entonces podría usar:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé esto ahora genera una advertencia: "Pasar el parámetro menor de set_xticks () posicionalmente está en desuso desde Matplotlib 3.2; el parámetro se convertirá en palabras clave solo dos versiones menores más adelante". ¿Cuál es la solución correcta ahora?
Rylan Schaeffer
2
@RylanSchaeffer ax.set_xticks([])para ticks mayores, ax.set_xticks([], minor=True)para ticks menores. Equivalentes con pyplotare plt.xticks([])y plt.xticks([], minor=True).
Anakhand
68

Aquí hay una solución alternativa que encontré en la lista de correo matplotlib :

import matplotlib.pylab as plt

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

grafico

Tom Phillips
fuente
42

Hay una solución mejor y más simple que la que da John Vinyard. Uso NullLocator:

import matplotlib.pyplot as plt

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

Espero que ayude.

dmcdougall
fuente
22
"Mejor" es discutible, pero +1 para la alternativa.
mechanical_meat
Una variante de esta solución también funcionó para mí cuando el objetivo era eliminar solo xticks de una inserción "ampliada", mientras los mantenía en la trama principal. Usando axins.xaxis.set_major_locator(plt.NullLocator()), donde axinses el objeto devuelto por axins = zoomed_inset_axes()(función importada de mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers
28

Pruebe esto para eliminar las etiquetas (pero no las marcas):

import matplotlib.pyplot as plt

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

ejemplo

auraham
fuente
3
setpestá en modo pylab, no se puede usar contra ejes individuales
guiones del
1
¿Qué tal la interfaz orientada a objetos?
ifly6
Esta fue la única respuesta que también funcionó para las tramas 3D para mí. ¡Gracias por esto!
Brent
13

Este fragmento podría ayudar a eliminar solo los xticks.

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

Este fragmento podría ayudar a eliminar los xticks y los yticks de ambos.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Amitrajit Bose
fuente
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
fuente
2
La versión orientada a objetos de esto esax.tick_params()
Marcelo Villa-Piñeros
1
Además, el uso offy onestá en desuso. 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

Aquellos de ustedes que buscan un comando breve para desactivar todos los ticks y etiquetas deberían estar bien con

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

que permite escribir bool para los parámetros respectivos desde la versión matplotlib> = 2.1.1

Para la configuración de marca personalizada, los documentos son útiles:

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

hahnec
fuente