Cómo habilitar / deshabilitar ejes fácilmente compartidos usando matplotlib

La respuesta anterior de tcaswell sobre cómo crear un eje compartido para gráficos que no están en la misma figura fue perfecta 🙂 ¿Pero ahora me pregunto cómo deshabilitar el eje compartido y volver a habilitarlos sin tener que volver a dibujar o destruir nada? (Tengo varios gráficos y quiero agregar un botón en el que el usuario puede hacer clic para deshabilitar / habilitar esos ejes compartidos) Encontré una forma:

import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) fig2 = plt.figure() ax2 = fig2.add_subplot(111, sharex=ax1) 

para crear el eje compartido y luego

 fig2.delaxes(ax2) ax2 = fig2.add_subplot(111) 

Pero esto requiere volver a dibujar todo y puede tardar algunas veces. No encontré una función simple para deshabilitar el enlace. ¿Hay alguna forma más ligera que la que hice?

Gracias !

No existe una forma fácil de hacer esto, sin embargo, creo que se puede hacer (solo se requerirá un poco de excavación en el interior de matplotlib ). La forma en que los ejes están vinculados por debajo es simplemente usando el mismo localizador y objetos de formateador para ambos axis . Para vincular / desvincular, tendrá que copiar / hacer nuevos todos esos objetos, así como actualizar algunas estructuras auxiliares ( _shared_x_axes , _shared_y_axes ). Mire la implementación de matplotlib.axes.Axes.cla() para tener una idea de lo que necesita hacer.

Hay una solicitud de extracción contra el repository que agrega esta funcionalidad y la solicitud de función asociada. Si te sientes cómodo a) instalando desde la fuente b) utilizando master yc) aplicando este parche, creo que los desarrolladores apreciarían que lo hayas probado.

Tu puedes hacer:

 ax2.get_shared_x_axes().remove(ax1) 

Referencias:

  • Documentos API que explican get_shared_x_axes
  • Documentos API que describen a Grouper.remove
  • (Parece que el método de eliminación se agregó al objeto Agrupador en 2015 )