¿Cómo puedo eliminar el eje superior y derecho de matplotlib?

En lugar del estilo predeterminado de “caja” del eje, quiero tener solo el eje izquierdo y el inferior, es decir:

+------+ | | | | | | ---> | | | | +------+ +------- 

Esto debería ser fácil, pero no puedo encontrar las opciones necesarias en los documentos.

Esta es la solución Matplotlib 2.0 sugerida desde el sitio web oficial AQUÍ :

 import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) ax = plt.subplot(111) ax.plot(x, y) # Hide the right and top spines ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) # Only show ticks on the left and bottom spines ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom') plt.show() 

introduzca la descripción de la imagen aquí

Alternativamente, este

 def simpleaxis(ax): ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.get_xaxis().tick_bottom() ax.get_yaxis().tick_left() 

Parece lograr el mismo efecto en un eje sin perder el soporte de etiqueta girada.

(Matplotlib 1.0.1; solución inspirada en esto ).

[edit] matplotlib en ahora (2013-10) en la versión 1.3.0 que incluye esto

Esa capacidad se acaba de agregar, y necesitas la versión de Subversion para ella. Puedes ver el código de ejemplo aquí .

Solo estoy actualizando para decir que hay un mejor ejemplo en línea ahora. Todavía necesito la versión de Subversion, sin embargo, no ha habido un lanzamiento con esto todavía.

[editar] Matplotlib 0.99.0 RC1 se acaba de lanzar, e incluye esta capacidad.

Si no necesita marcas y otras (por ejemplo, para trazar ilustraciones cualitativas) también puede usar esta solución rápida:

Haga que el eje sea invisible (por ejemplo, con plt.gca().axison = False ) y luego dibuje manualmente con plt.arrow .

(Esto es más un comentario de extensión, además de las respuestas completas aquí).


Tenga en cuenta que podemos ocultar cada uno de estos tres elementos independientemente uno del otro:

  • Para ocultar el borde (también conocido como “columna vertebral”): ax.set_frame_on(False) o ax.spines['top'].set_visible(False)

  • Para ocultar las garrapatas: ax.tick_params(top=False)

  • Para ocultar las tags: ax.tick_params(labeltop=False)

La biblioteca Seaborn tiene esto incorporado con función despine ().

Solo agrega:

 import seaborn as sns 

Ahora crea tu gráfica. Y añadir al final:

 sns.despine() 

Si observa algunos de los valores predeterminados de los parámetros de la función, elimina la columna vertebral superior y derecha y mantiene la columna inferior y la columna izquierda:

 sns.despine(top=True, right=True, left=False, bottom=False) 

Consulte la documentación adicional aquí: https://seaborn.pydata.org/generated/seaborn.despine.html