web-dev-qa-db-fra.com

Matplotlib / Pyplot: Comment zoomer ensemble des sous-parcelles?

J'ai des tracés de données chronologiques de l'accéléromètre à 3 axes (t, x, y, z) dans des sous-tracés séparés que je voudrais zoomer ensemble. Autrement dit, lorsque j'utilise l'outil "Zoom sur rectangle" sur un tracé, lorsque je relâche la souris, les 3 tracés zooment ensemble.

Auparavant, je traçais simplement les 3 axes sur un même tracé en utilisant des couleurs différentes. Mais cela n'est utile qu'avec de petites quantités de données: j'ai plus de 2 millions de points de données, donc le dernier axe tracé masque les deux autres. D'où la nécessité de sous-parcelles distinctes.

Je sais que je peux capturer des événements de souris matplotlib/pyplot (http://matplotlib.sourceforge.net/users/event_handling.html), et je sais que je peux attraper d'autres événements (http://matplotlib.sourceforge.net/api/backend_bases_api .html # matplotlib.backend_bases.ResizeEvent), mais je ne sais pas comment dire quel zoom a été demandé sur une sous-intrigue et comment le répliquer sur les deux autres sous-intrigues.

Je soupçonne que j'ai toutes les pièces et que je n'ai besoin que d'un dernier indice précieux ...

-BobC

64
BobC

La façon la plus simple de procéder consiste à utiliser les mots clés sharex et/ou sharey lors de la création des axes:

from matplotlib import pyplot as plt

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

Vous pouvez également le faire avec plt.subplots, si c'est votre style.

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

De manière interactive, cela fonctionne sur des axes séparés

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