2010-11-17 24 views
47

Tengo gráficos de datos de la serie temporal del acelerómetro de 3 ejes (t, x, y, z) en subparcelas separadas que me gustaría hacer zoom juntos. Es decir, cuando utilizo la herramienta "Zoom a rectángulo" en una gráfica, cuando suelto el mouse, las 3 representaciones se acercan.Matplotlib/Pyplot: ¿Cómo hacer zoom de subparcelas juntas?

Anteriormente, simplemente tracé los 3 ejes en una sola parcela con 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 subparcelas separadas.

Sé que puedo capturar eventos de mouse matplotlib/pyplot (http://matplotlib.sourceforge.net/users/event_handling.html), y sé que puedo ver 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 subtrama y cómo replicarla en las otras dos subtramas.

sospecho que tengo las todas las piezas, y sólo necesita que una última pista preciosa ...

-BobC

Respuesta

75

La forma más sencilla de hacer esto es mediante el uso de la sharex y/o palabras clave sharey al 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(...) 
+4

Sospeché que sería simple, pero no así de simple. Gracias! – BobC

+0

¡Resolvió mi problema con series de tiempo multicanal también! ¡Estupendo! – heltonbiker

-1

interactiva esto funciona en ejes separados

for ax in fig.axes: 
    ax.set_xlim(0, 50) 
fig.draw() 
2

También puede hacerlo con plt.subplots, si ese es su estilo.

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