# Plotting many images at once in matplotlib

I am using numpy and matplotlib to do a statistical simulation. The simulation itself is pretty fast thanks to numPy vectorizatio, however the plotting is slow since I still use a for loop.

Here is the result: Right now, I call matplotlib.pyplot.plt 10000 times - once for each tile in 100 × 100 square which can't possibly be optimal, but I can't think of how to do it better:

N = 100
for x in range(N):
for y in range(N):
plt.fill( myPath[x,y,0] ,myPath[x,y,1])


Let's say I stored all the varaibles in an numPy array myPath with shape (N,N,2,4) so that myPath[x,y,0] and myPath[x,y,1] give the x and y coordinates of the path.

How do I reduce the number of calls to plt in my visualization?

• Wouldn't plt.fill(myPath[..., ..., 0], myPath[..., ..., 1]) without a loop do the trick? Jun 3, 2014 at 13:50

Try using matplotlib's LineCollection class. Here's an example.

In your case, you might do:

from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection

ax = plt.gca()
pts = myPath.reshape((-1,2))  # make a matrix of (x,y) pairs
edges = LineCollection(pts)