Ocultar valores de eje pero mantener etiquetas de marca de eje en matplotlib

101

Tengo esta imagen:

plt.plot(sim_1['t'],sim_1['V'],'k')
plt.ylabel('V')
plt.xlabel('t')
plt.show()

ingrese la descripción de la imagen aquí

Quiero ocultar los números; si uso:

plt.axis('off')

... obtengo esta imagen:

ingrese la descripción de la imagen aquí

También oculta las etiquetas Vy t. ¿Cómo puedo mantener las etiquetas mientras oculto los valores?

Luis Ramón Ramírez Rodríguez
fuente

Respuestas:

137

Si usa el enfoque orientado a objetos matplotlib , esta es una tarea simple usando ax.set_xticklabels()y ax.set_yticklabels():

import matplotlib.pyplot as plt

# Create Figure and Axes instances
fig,ax = plt.subplots(1)

# Make your plot, set your axes labels
ax.plot(sim_1['t'],sim_1['V'],'k')
ax.set_ylabel('V')
ax.set_xlabel('t')

# Turn off tick labels
ax.set_yticklabels([])
ax.set_xticklabels([])

plt.show()
tmdavison
fuente
11
Funciona muy bien para eliminar las etiquetas de las marcas, pero aún así aparecen las marcas ...
Andrew Schreiber
85

Sin un subplots, puede eliminar universalmente las marcas de esta manera:

plt.xticks([])
plt.yticks([])
Noel Evans
fuente
44

Esto funciona muy bien. Solo pega esto antes plt.show():

plt.gca().axes.get_yaxis().set_visible(False)

Auge.

MRT
fuente
2
Gracias, esto funciona muy bien. En los otros casos, los ticks se conservan (porque la dirección del tick está fuera de forma predeterminada)
user140259
A diferencia de respuestas como ax.set_xticklabels ([]), esta funciona perfectamente para el siguiente caso: uno usa subtramas con la opción sharex y quiere eliminar ticks solo para una de las subtramas.
Михаил Лисаков
¡Excelente! Y plt.gca (). Axes.get_xaxis (). Set_visible (False) para deshacerse también de las etiquetas y ticks del eje x.
fbparis
1
o si ya tiene el objeto ax,ax.xaxis.set_visible(False)
spinup
1
@filip Me alegro de que haya ayudado :)
MRT
3

No estoy seguro de que sea la mejor manera, pero ciertamente puede reemplazar las etiquetas de marca de esta manera:

import matplotlib.pyplot as plt
x = range(10)
y = range(10)
plt.plot(x,y)
plt.xticks(x," ")
plt.show()

En Python 3.4, esto genera una gráfica de línea simple sin etiquetas de marca en el eje x. Un ejemplo simple está aquí: http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html

Esta pregunta relacionada también tiene algunas sugerencias mejores: Ocultar el texto del eje en diagramas de matplotlib

Soy nuevo en Python. Su kilometraje puede variar en versiones anteriores. ¿Quizás otros puedan ayudar?

Joe Gavin
fuente
2

para eliminar las marcas de graduación por completo, use:

ax.set_yticks([])
ax.set_xticks([])

de lo contrario ax.set_yticklabels([])y ax.set_xticklabels([])mantendrá marcas de verificación.

Ruslan S.
fuente
Cuando lo intento ax.set_yticks([], []), recibo la siguiente advertencia: "MatplotlibDeprecationWarning: Pasar el parámetro menor de set_xticks () posicionalmente está en desuso desde Matplotlib 3.2; el parámetro se convertirá en solo palabra clave dos versiones menores más adelante". ¿Cuál es la alternativa correcta?
Rylan Schaeffer
@RylanSchaeffer, en su ejemplo ax.set_yticks([], [])está pasando 2 listas vacías que causan errores. ¿Por qué hacer eso? Consulte el manual de comandos. Si el primer argumento no se debe pasar posicionalmente, pasarlo con la palabra clave: ax.set_yticks(ticks=[]).
Ruslan S.
0

plt.gca().axes.yaxis.set_ticklabels([])

ingrese la descripción de la imagen aquí

Nic Scozzaro
fuente