Imagen de la demostración de Python al pasar sobre un punto

Tengo un diagtwig de puntos de dispersión 2-d, que corresponden a imágenes. Me preguntaba si hay una forma fácil de mostrar la imagen correspondiente (como una ventana emergente o información sobre herramientas) cuando pasas el mouse sobre cada punto. Lo intenté de forma gráfica pero descubrí que necesitas editar manualmente javascript para que el evento de desplazamiento funcione. ¿Existe una solución simple solo con matplotlib o algún otro paquete común?

Encuentre aquí una solución completa sobre cómo mostrar una imagen en los eventos de desplazamiento. Utiliza un 'motion_notify_event' para detectar cuando el mouse está sobre un punto de dispersión (al pasar el mouse). Si este es el caso, muestra una anotación de imagen con una imagen correspondiente al lado del punto de dispersión flotante.

 import matplotlib.pyplot as plt from matplotlib.offsetbox import OffsetImage, AnnotationBbox import numpy as np; np.random.seed(42) # Generate data x, y for scatter and an array of images. x = np.arange(20) y = np.random.rand(len(x)) arr = np.empty((len(x),10,10)) for i in range(len(x)): f = np.random.rand(5,5) arr[i, 0:5,0:5] = f arr[i, 5:,0:5] =np.flipud(f) arr[i, 5:,5:] =np.fliplr(np.flipud(f)) arr[i, 0:5:,5:] = np.fliplr(f) # create figure and plot scatter fig = plt.figure() ax = fig.add_subplot(111) line, = ax.plot(x,y, ls="", marker="o") # create the annotations box im = OffsetImage(arr[0,:,:], zoom=5) xybox=(50., 50.) ab = AnnotationBbox(im, (0,0), xybox=xybox, xycoords='data', boxcoords="offset points", pad=0.3, arrowprops=dict(arrowstyle="->")) # add it to the axes and make it invisible ax.add_artist(ab) ab.set_visible(False) def hover(event): # if the mouse is over the scatter points if line.contains(event)[0]: # find out the index within the array from the event ind, = line.contains(event)[1]["ind"] # get the figure size w,h = fig.get_size_inches()*fig.dpi ws = (event.x > w/2.)*-1 + (event.x <= w/2.) hs = (event.y > h/2.)*-1 + (event.y <= h/2.) # if event occurs in the top or right quadrant of the figure, # change the annotation box position relative to mouse. ab.xybox = (xybox[0]*ws, xybox[1]*hs) # make annotation box visible ab.set_visible(True) # place it at the position of the hovered scatter point ab.xy =(x[ind], y[ind]) # set the image corresponding to that point im.set_data(arr[ind,:,:]) else: #if the mouse is not over a scatter point ab.set_visible(False) fig.canvas.draw_idle() # add callback for mouse moves fig.canvas.mpl_connect('motion_notify_event', hover) plt.show() 

introduzca la descripción de la imagen aquí