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. > 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
signature.asc
Description: This is a digitally signed message part
------------------------------------------------------------------------------ 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