Techniques de visualisation interactive avec Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introduction

Ce laboratoire vise à vous présenter le concept de picking dans Matplotlib. La capacité de sélectionner des artistes est un outil puissant qui peut être utilisé pour créer des visualisations interactives qui répondent aux actions de l'utilisateur. Nous aborderons le picking simple, le picking avec des fonctions de test de frappe personnalisées, le picking sur un nuage de points et le picking d'images.

Conseils sur la VM

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.

Picking simple, lignes, rectangles et texte

Nous commencerons par activer le picking simple en configurant la propriété "picker" d'un artiste. Cela permettra à l'artiste de déclencher un événement de sélection si l'événement souris se produit au-dessus de l'artiste. Nous allons créer un tracé simple contenant une ligne, un rectangle et du texte, et activer le picking sur chacun de ces artistes.

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.set_title('cliquez sur les points, les rectangles ou le texte', picker=True)
ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax1.plot(rand(100), 'o', picker=True, pickradius=5)

## Sélectionnez le rectangle.
ax2.bar(range(10), rand(10), picker=True)
for label in ax2.get_xticklabels():  ## Rendre les étiquettes d'échelle x sélectionnables.
    label.set_picker(True)

Création d'une fonction de test de frappe personnalisée

Dans cette étape, nous allons définir un sélecteur personnalisé en configurant picker avec une fonction appelable. La fonction déterminera si l'artiste est touché par l'événement souris. Si l'événement souris se trouve au-dessus de l'artiste, nous renverrons hit=True et props est un dictionnaire de propriétés que vous souhaitez ajouter aux attributs .PickEvent.

def line_picker(line, mouseevent):
    """
    Trouvez les points à une certaine distance du clic de souris dans
    les coordonnées de données et attachez quelques attributs supplémentaires, pickx et picky
    qui sont les points de données qui ont été sélectionnés.
    """
    if mouseevent.xdata is None:
        return False, dict()
    xdata = line.get_xdata()
    ydata = line.get_ydata()
    maxd = 0.05
    d = np.sqrt(
        (xdata - mouseevent.xdata)**2 + (ydata - mouseevent.ydata)**2)

    ind, = np.nonzero(d <= maxd)
    if len(ind):
        pickx = xdata[ind]
        picky = ydata[ind]
        props = dict(ind=ind, pickx=pickx, picky=picky)
        return True, props
    else:
        return False, dict()


def onpick2(event):
    print('onpick2 line:', event.pickx, event.picky)


fig, ax = plt.subplots()
ax.set_title('sélecteur personnalisé pour les données de ligne')
line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker)
fig.canvas.mpl_connect('pick_event', onpick2)

Picking sur un nuage de points

Un nuage de points est basé sur une ~matplotlib.collections.PathCollection. Nous allons créer un nuage de points et activer le picking.

x, y, c, s = rand(4, 100)


def onpick3(event):
    ind = event.ind
    print('onpick3 scatter:', ind, x[ind], y[ind])


fig, ax = plt.subplots()
ax.scatter(x, y, 100*s, c, picker=True)
fig.canvas.mpl_connect('pick_event', onpick3)

Picking des images

Les images tracées à l'aide de .Axes.imshow sont des objets ~matplotlib.image.AxesImage. Nous allons créer une figure avec plusieurs images et activer le picking.

fig, ax = plt.subplots()
ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True)
ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True)
ax.imshow(rand(20, 25), extent=(1, 2, 3, 4), picker=True)
ax.imshow(rand(30, 12), extent=(3, 4, 3, 4), picker=True)
ax.set(xlim=(0, 5), ylim=(0, 5))


def onpick4(event):
    artist = event.artist
    if isinstance(artist, AxesImage):
        im = artist
        A = im.get_array()
        print('onpick4 image', A.shape)


fig.canvas.mpl_connect('pick_event', onpick4)

Sommaire

Dans ce laboratoire, nous avons appris à activer le picking sur divers artistes dans Matplotlib, y compris des lignes, des rectangles, du texte, des nuages de points et des images. Nous avons également appris à définir des fonctions de test de frappe personnalisées pour activer un comportement de sélection plus complexe. Cet outil puissant nous permet de créer des visualisations interactives qui répondent aux actions de l'utilisateur.