Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

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?

share|improve this question
1  
Wouldn't plt.fill(myPath[..., ..., 0], myPath[..., ..., 1]) without a loop do the trick? –  Morwenn Jun 3 '14 at 13:50

1 Answer 1

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()
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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