Animando los ejes / ticks de matplotlib

Tengo una instancia de axes matplotlib dentro de la cual estoy animando una imagen de AxesImage través de blit ting.

Lo que me gustaría hacer es animar las garrapatas en el eje x también. Estoy actualizando los datos en AxesImage (y posteriormente) dibujando a su artista con bastante frecuencia, y en cada actualización me gustaría mover un tick adicional colocado para resaltar la posición de algo. Esto es lo que estoy haciendo ahora mismo:

 axis = axes.get_xaxis im.set_data(new_data) axis.set_ticks([10,20,30,x,t]) axis.set_ticklabels(["p", "u", "z", "z", "i"]) axes.draw_artist(im) axes.draw_artist(axis) 

Mientras veo que los ticks se actualizan correctamente, las tags no. Creo que los ejes bbox no incluyen los ejes, ¿es esto posible? Si es así, ¿cómo puedo animarlo? ¿Debo copiar y restaurar desde otro lugar?

El bbox de los ejes no incluye nada fuera del “interior” de los ejes (por ejemplo, no incluye las tags de verificación, el título, etc.)

Una forma rápida de evitar esto es simplemente agarrar la región completa de la figura cuando estás trabajando. (Por ejemplo, background = canvas.copy_from_bbox(fig.bbox) )

Esto puede causar problemas si tiene múltiples subplots y solo desea animar uno de ellos. En ese caso, puede hacer algo en la línea de background = canvas.copy_from_bbox(ax.bbox.expanded(1.1, 1.2)) . Sin embargo, tendrás que estimar las proporciones que necesitas.

Si necesita la extensión exacta de las tags de tick, es un poco más complicado. La forma más fácil es recorrer los objetos ticklabel y obtener la unión con ax.bbox . Puede hacer que sea de una sola línea: ax.bbox.union([label.get_window_extent() for label in ax.get_xticklabels()]) .

En cualquier caso, creo que una de esas tres opciones debería hacer lo que necesita.