On Tue, Jun 21, 2011 at 8:47 AM, Paul Menzel <
paulepan...@users.sourceforge.net> wrote:

> 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?
>

I'm not sure what you are trying to show, but my impression is that you are
just producing the grid between integers (move up,down), and paths will not
show up because the lines are all on top of each other.

The number of all paths looks very large to me and even without matplotlib
overhead, this might soon run into problems.

for example;
for length= 15; I get 65534 moves in the random walks, but only 240 unique
moves
for length= 20; I get 2097150 moves in the random walks, but only 420 unique
moves
plotting only unique moves is fast (count of moves might work to color the
amount of traffic on each move)

rw_moves = []
def irrpfad2(a, b):
    if a < length:
        rw_moves.append((a, b, a + 1, b + 1))
        rw_moves.append((a, b, a + 1, b - 1))
        irrpfad2(a + 1, b + 1)
        irrpfad2(a + 1, b - 1)

length = 20 # 20 not possible to run
irrpfad2(0, 0)

I don't know any answer to the matplotlib specific part

Josef



>
> 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
>
>
> ------------------------------------------------------------------------------
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to