2010-11-17 66 views

Respuesta

91

Esto es un error común al usar ejes compartidos.

Afortunadamente, hay una solución simple: use plt.setp(ax.get_xticklabels(), visible=False) para hacer que las etiquetas sean invisibles en un solo eje.

Esto es equivalente a [label.set_visible(False) for label in ax.get_xticklabels()], para lo que sea que valga la pena. setp operará automáticamente en un iterable de objetos matplotlib, así como objetos individuales.

A modo de ejemplo:

import matplotlib.pyplot as plt 
fig = plt.figure() 
ax1 = fig.add_subplot(2,1,1) 
ax1.plot(range(10), 'b-') 

ax2 = fig.add_subplot(2,1,2, sharex=ax1) 
ax2.plot(range(10), 'r-') 

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

plt.show() 

alt text

+5

que tenía el problema inverso: Las etiquetas de la segunda trama secundaria no mostrarían. así que utilicé su comando de esta manera: '' plt.setp (ax2.get_yticklabels(), visible = True) ''. Funcionó sin problemas. – n1000

32

por un hilo en matplotlib-users, podría utilizar

import matplotlib.pyplot as plt 
for ax in plt.gcf().axes: 
    try: 
     ax.label_outer() 
    except: 
     pass 
+1

Me gustaría poder votar esto más, porque es mucho más útil que la respuesta aceptada. La única situación en la que desea modificar la visibilidad en lugar de simplemente eliminarlos es en las subtramas; y tu respuesta es mucho más inteligente en ese caso. ¡Gracias! –

+0

¿Por qué 'try' es necesario? Parece bien sin eso. –

+1

'try' es necesario porque no se garantiza que todos los elementos de la lista' plt.gcf(). Axes' sean 'subplot' (con un método' label_outer'). – esmit

1

Puede compartir los ejes durante la creación trama secundaria con plt.subplots como

fig, axes = plt.subplots(nrows=2, sharex=True) 

Esto desactivará automáticamente las etiquetas de los ejes interiores.

Ejemplo completo:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(nrows=2, sharex=True) 

axes[0].plot([1,2,3]) 
axes[1].plot([3,2,1]) 

plt.show() 

enter image description here

+0

pero si intenta mover las garrapatas al otro lado de la trama, las etiquetas vuelven a aparecer:/ – endolith

+0

Sí cierto, en ese caso especial necesita volver a hacerlas invisibles. – ImportanceOfBeingErnest

+0

'label_outer()' parece funcionar https://stackoverflow.com/a/12751192/125507 – endolith

Cuestiones relacionadas