I knew of matplotlib, but I was not aware of the GridSpec feature. Thanks for pointing it out. I'll look into it. Thanks also for your other comments.
kj On Nov 4, 1:26 pm, Jason Grout <jason-s...@creativetrax.com> wrote: > On 11/4/10 11:59 AM, kj wrote: > > > > > > > I would like to extend Sage to allow for recursive composition of > > graphics arrays. (I.e. to enable having graphics arrays as individual > > elements in a larger graphics array; as far as I can tell, Sage's > > graphics_array does not support such higher-order graphics arrays.) > > > For this, the function that generates the graphics array must take a > > 1d or 2d array of graphics objects as one of its arguments, and return > > a graphics object. > > > In order to do this, it would be helpful for me to understand Sage's > > "data model" for graphics. In particular, I need to determine if > > Sage's graphics objects are cleanly separate from possible display > > channels. > > > To see why, consider, for example, Mathematica Graphics objects, which > > are at the center of its graphics model. As far as I can tell from > > Mathematica's documentation, to the user, such a Graphics object can > > be interpreted (as a first approximation at least) as nothing more > > than an abstract textual representation of a graphic, independent of > > any display channel. This textual representation can be interpreted > > by various drivers to produced various types of output (e.g. a screen > > display or PostScript). The key point is that there appears to be a > > clean separation between Mathematica's Graphics objects, and the > > channels used for displaying them. (I repeat that all of this is > > nothing more than a guess on my part, since Mathematica is a black > > box.) > > > This separation of the abstract Graphics objects from any concrete > > display channel greatly simplifies the problem of creating composite > > Graphics objects from other Graphics objects, since there's no need to > > reconcile any possible differences that may exist in channel > > information for the individual components. > > > Is there a similar separation between the specification of Sage > > graphics objects and display channels? To put it differently, how > > much information about display channels is encoded in these objects? > > Is there a write-up (or just some descriptive UML) on Sage's graphics > > model that discusses these topics? > > Yes, there is that separation that you describe. Graphics objects are > just python objects that know how to draw themselves when asked. They > draw themselves using matplotlib (see the _render_on_subplot function in > each object, for exampe, in devel/sage/sage/plot/circle.py). Matplotlib > then takes care of the "channel," as you call it, or drawing "backend," > as matplotlib calls it. That drawing does not happen until the object is > drawn to an actual file. You can see this since, for example, you can > save a graphics object as a png file or a pdf file (two different channels): > > sage: a=circle((0,0),1) > sage: a > > sage: a.save('test.png') > sage: a.save('test.pdf') > > You can see the save method code in the devel/sage/sage/plot/plot.py. > Basically, a matplotlib object is created, and then each object is asked > to draw itself on the canvas (or "axes," in matplotlib terminology). > > I think to do what you want, it would be best to understand the > matplotlib model for drawing multiple figures on an image. Matplotlib > is the underlying library we use to draw Sage 2d figures, and is very > powerful. Recently, some new capabilities for drawing arrays of > graphics have been added (in matplotlib 1.0.0). Here are some links to > documentation: > > http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pypl... > > http://matplotlib.sourceforge.net/users/whats_new.html#sophisticated-... > > http://matplotlib.sourceforge.net/users/gridspec.html#gridspec-guide > > In > particular,http://matplotlib.sourceforge.net/users/gridspec.html#gridspec-using-... > describes how to nest arrays of arrays in matplotlib. > > I think we just need to wrap and expose this functionality that is > already in matplotlib in the Sage interface. > > Thanks, > > Jason -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org