3
\$\begingroup\$

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:

enter image description here

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?

\$\endgroup\$
  • 2
    \$\begingroup\$ Wouldn't plt.fill(myPath[..., ..., 0], myPath[..., ..., 1]) without a loop do the trick? \$\endgroup\$ – Morwenn Jun 3 '14 at 13:50
4
\$\begingroup\$

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)
ax.add_collection(edges)
plt.show()
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.