Am Dienstag, den 21.06.2011, 19:17 -0400 schrieb josef.p...@gmail.com:
> On Tue, Jun 21, 2011 at 5:25 PM, Paul Menzel wrote:
> > Am Dienstag, den 21.06.2011, 09:43 -0400 schrieb josef.p...@gmail.com:
> >> On Tue, Jun 21, 2011 at 8:47 AM, Paul Menzel wrote:
> >
> >> > 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),
> >
> > Yeah, that is about right [1].
> >
> >> and paths will not show up because the lines are all on top of each other.
> >
> > That is not true. My program displays everything correctly when using
> > for example `length = 5`.
> >
> >> The number of all paths looks very large to me and even without matplotlib
> >> overhead, this might soon run into problems.
> >
> > That is what thought too.
> >
> >> 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)
> >
> > I am sorry, I think that in my program no section is drawn more than
> > once.
> 
> each append below corresponds to one call to your draw function
> 
> Do you want to draw all possible routes, or the road network?

I am sorry. I now do understand your previous sentences correctly. Yes I
am aware that patches overlap and I only need to draw the road network.

> I only see the road network in the plot

Yes that is correct and intended.

> (and partially the traffic density with alpha<1).

Nice suggestion. Thank you.

> >> 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)
> >
> > Thank you for the example, but now I need to somehow also add the codes
> > to be able to pass this to Path.
> >
> >> I don't know any answer to the matplotlib specific part
> >
> > Thank you for your other answers.
> >
> >> > 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
> > [3] https://secure.wikimedia.org/wikipedia/en/wiki/Random_walk

Attachment: signature.asc
Description: This is a digitally signed message part

------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger.
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today.
http://p.sf.net/sfu/quest-sfdev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to