Matplotlib / Pyplot: ¿Cómo acercar subtramas juntas?


81

Tengo gráficos de datos de series de tiempo del acelerómetro de 3 ejes (t, x, y, z) en subtramas separadas que me gustaría acercar. Es decir, cuando uso la herramienta "Zoom a rectángulo" en un gráfico, cuando suelto el mouse, los 3 gráficos hacen zoom juntos.

Anteriormente, simplemente trazaba los 3 ejes en un solo gráfico usando diferentes colores. Pero esto es útil solo con pequeñas cantidades de datos: tengo más de 2 millones de puntos de datos, por lo que el último eje trazado oscurece los otros dos. De ahí la necesidad de subtramas separadas.

Sé que puedo capturar eventos de mouse matplotlib / pyplot (http://matplotlib.sourceforge.net/users/event_handling.html), y sé que puedo capturar otros eventos (http://matplotlib.sourceforge.net/api/backend_bases_api .html # matplotlib.backend_bases.ResizeEvent), pero no sé cómo saber qué zoom se ha solicitado en una subparcela y cómo replicarlo en las otras dos subtramas.

Sospecho que tengo todas las piezas y solo necesito esa última pista preciosa ...

-BobC


En mi opinión, la mejor documentación es el código de ejemplo que proporcionan: matplotlib.org/examples/pylab_examples/shared_axis_demo.html
Trevor Boyd Smith

1
¡Cierto! Ojalá existiera esa página cuando hice mi pregunta. Tan bueno que está ahí ahora.
BobC

Respuestas:


120

La forma más sencilla de hacerlo es utilizando las palabras clave sharexy / o shareyal crear los ejes:

from matplotlib import pyplot as plt

ax1 = plt.subplot(2,1,1)
ax1.plot(...)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(...)

33

También puedes hacer esto con plt.subplots, si ese es tu estilo.

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True)

-1

Interactivamente, esto funciona en ejes separados

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.