Microentrada: Rendimiento de scatterplots en matplotlib

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

Y ahora lo mismo pero con un plot normal

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

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 🙂