Dear Matplotlib folks,
I want to plot all paths of a simple random walk and wrote the following
recursive program based on the Path tutorial [1].
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
def draw(a, b, c, d):
verts = [
(a, b),
(c, d),
(0, 0),
]
codes = [
Path.MOVETO,
Path.LINETO,
Path.CLOSEPOLY
]
path = Path(verts, codes)
patch = patches.PathPatch(path)
ax.add_patch(patch)
def irrpfad(a, b):
if a < length:
draw(a, b, a + 1., b + 1.)
draw(a, b, a + 1., b - 1.)
irrpfad(a + 1, b + 1)
irrpfad(a + 1, b - 1)
length = 5 # 20 not possible to run
fig = plt.figure()
ax = fig.add_subplot(111)
irrpfad(0, 0)
ax.set_xlim(0,length)
ax.set_ylim(-length,length)
plt.show()
Using 20 for `length` stalls my system and the memory used seems to be
over 1 GB. I guess this is what you guess using something recursive.
What optimizations are there. I am drawing each line after another so
probably too many separate paths instead of one. Being a Python noob I
do not know if I can append something to a path. Looking at the API
documentation [2] I did not see such a method.
Being also new to Matplotlib I may have also overlooked more appropriate
methods/classes.
So to summarize my message,
1. How can I add lines to a path?
2. Are recursive functions bad in Python/Matplotlib?
3. Are there better approaches?
Please find the source also attached. I am using python-matplotlib
1.0.1-2 from Debian Sid/unstable.
Thanks,
Paul
[1] http://matplotlib.sourceforge.net/users/path_tutorial.html
[2] http://matplotlib.sourceforge.net/api/path_api.html#matplotlib.path.Path
srw.py (903 Bytes)