Microentrada: Rendimiento de scatterplots en matplotlib

Por Kiko Correoso

Normalmente, si vas a dibujar pocos puntos en un scatter plot lo normal es usar scatter en matplotlib. Sin embargo, si tienes que dibujar una cantidad considerable de puntos, el rendimiento puede ser un factor importante. Como alternativa se puede usar plot en lugar de scatter.

Veamos un ejemplo muy sencillo de esto y el rendimiento obtenido. vamos a dibujar 100.000 puntos aleatorios y ver los tiempos que obtenemos usando scatter y plot.

Primero importamos las librerías a usar:

import numpy as np
import matplotlib.pyplot as plt
%%matplotlib inline

Creamos 100.000 puntos aleatorios:

x = np.random.rand(100000)
y = np.random.rand(100000)

Veamos lo que tarda un scatter plot

plt.scatter(x,y)
1 loops, best of 3: 598 ms per loop

wpid1

Y ahora lo mismo pero con un plot normal

plt.plot(x,y, 'bo')
100 loops, best of 3: 9.09 ms per loop

wpid2

La diferencia entre ambas opciones es:

$Rendimiento = \frac{scatter}{plot} = \frac{598}{9.09} \approx 65 $

Motivación de esta entrada: hoy en el trabajo he tenido que escribir unos cuantos paneles de figuras 8x8, es decir, 64 figuras en cada panel, con más de 50.000 datos en cada figura y me ha parecido interesante compartir este pequeño truco que tengo por ahí guardado para estos casos 🙂


photo

Kiko es doctor en ciencias físicas y esta especializado en física de la atmósfera, meteorología y climatología. Además de estar en las nubes es especialista en temas de energías renovables en Iberdrola. Ávido de seguir mejorando siempre está abierto a participar en nuevos proyectos y retos por lo que no dudes en contactarle si necesitas servicios especializados de Python o meteorología.

Comentarios