¿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?


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í


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

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)

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


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.


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


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.