Actualizando las posiciones y colores de pyplot.scatter.

He estado luchando con esto por un tiempo y no puedo hacerlo funcionar. Estoy leyendo un archivo en fragmentos y dispersando datos de él, y me gustaría “animarlo” actualizando el diagtwig de dispersión para cada fragmento en un bucle for (y también adaptarlo a una transmisión de datos en vivo).

Así que algo como este ejemplo feo funciona para una sola ttwig:

 x = [1, 2, 3, 4] y = [4, 3, 2, 1] alpha = [0.2, 0.3, 0.8, 1.0] c = np.asarray([(0, 0, 1, a) for a in alpha]) s = scatter(x, y, marker='o', color=c, edgecolors=c) 

parcela de arriba

Pero, ¿cómo actualizo la ttwig sin llamar a s.remove() y scatter() repetidamente? Se supone que los s.set_offsets s.set_array y nombres de s.set_array completamente intuitivos para actualizar los colores y las posiciones x e y, pero no puedo averiguar cómo usarlos con el tipo de x, y, datos alfa que tengo arriba.

(Además, ¿hay una mejor manera de hacer el alfa en la gráfica anterior?)

La solución que encontré para esto involucra el uso de Normalizar para hacer una lista de colores normalizada basada en los datos relevantes, asignarla a un ScalarMappable y usarla para establecer el color de la cara y los límites de c en cada fotogtwig de la animación. Con scat, el controlador de la gráfica de dispersión y la lista speedsist proporcionan los datos de color:

 n = mpl.colors.Normalize(vmin = min(speedsList), vmax = max(speedsList)) m = mpl.cm.ScalarMappable(norm=n, cmap=mpl.cm.afmhot) scat.set_facecolor(m.to_rgba(speedsList)) scat.set_clim(vmin=min(speedsList), vmax=max(speedsList)) 

Esto hace exactamente lo que espero.