Question Matplotlib / Pyplot: Comment agréger les sous-diagrammes ensemble?


J'ai des diagrammes de données de séries chronologiques d'accéléromètre à 3 axes (t, x, y, z) dans des sous-points distincts que je souhaite agrandir. C'est-à-dire que lorsque j'utilise l'outil "Zoom sur rectangle" sur un tracé, lorsque je relâche la souris, les trois tracés sont agrandis.

Auparavant, j'ai simplement tracé les trois axes sur une seule parcelle en utilisant différentes couleurs. Mais ceci 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 trace les deux autres. D'où la nécessité de séparer les intrigues.

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 déterminer quel zoom a été demandé sur une sous-parcelle et comment le répliquer sur les deux autres sous-parcelles.

Je soupçonne que j'ai tous les morceaux, et que je n'ai besoin que d'un dernier indice précieux ...

-BobC


52
2017-11-17 00:58


origine


Réponses:


La façon la plus simple de le faire est d'utiliser le sharex et / ou sharey mots clés 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(...)

79
2017-11-17 01:38



Vous pouvez aussi le faire avec plt.subplots, si c'est ton style.

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

7
2017-09-20 18:47



Interactivement, cela fonctionne sur des axes séparés

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

-1
2018-01-06 13:49