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:
1 2 3 |
import numpy as np import matplotlib.pyplot as plt %%matplotlib inline |
Creamos 100.000 puntos aleatorios:
1 2 |
x = np.random.rand(100000) y = np.random.rand(100000) |
Veamos lo que tarda un scatter plot
1 |
plt.scatter(x,y) |
1 |
1 loops, best of 3: 598 ms per loop |

Y ahora lo mismo pero con un plot normal
1 |
plt.plot(x,y, 'bo') |
1 |
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 8×8, 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 🙂
Por cierto, la entrada ha sido publicada del notebook a wp usando ipy2wp. Ayúdanos a mejorar la herramienta (https://github.com/Pybonacci/ipy2wp)
¿Y por qué no usar siempre plot?
Solo con plot no podrías hacer gráficos como este (o te resultarían muy complicados): http://matplotlib.org/examples/pylab_examples/scatter_demo2.html
Por ejemplo.
Me encantan estos trucos de “perro viejo” 😉
Gracias por compartirlo Kiko!
P.D.: Creo recordar que en MATLAB ocurre algo similar (también aprendido por haberlo sufrido en carnes)