# How to control layouts of individual plots within a graphics_array?

I am trying to plot two graphics side-by side from with an '@interact' function within the Sage notebook.

I define my graphics array and render it with the appropriate size as follows:

myGraphicsArray = graphics_array([myPlot1, myPlot2])

myGraphicsArray.show(figsize=[14,5])


This is fine, but how can I control features of the individual plots separately? (e.g. axis range, aspect ratio, maybe even relative sizes of the two plots etc.)

For now I have found a kludge workaround, which is to .show() the individual plots first of all (making them very small) within which I set the relevant layout parameters as follows:

myPlot1.show(ymin=-40,ymax=10,figsize=0.1) # note small figsize

myPlot2.show(xmin=-axisMax, xmax=axisMax, ymin=-axisMax, ymax=axisMax, aspect_ratio=1, figsize=0.1) # note small figsize


This is not ideal, as it plots them (albeit small) when I didn't really want to. But at least it allows me to control their respective layouts when they later appear within the graphics_array.

But is there a better way to do this?

edit retag close merge delete

This answer also exists at http://doxdrum.wordpress.com/2010/08/12/graphics-array-in-sagemath/. Unfortunately, I don't think there is a better way for now; graphics_array still needs a fair amount of work. See http://trac.sagemath.org/sage_trac/ticket/10657, http://trac.sagemath.org/sage_trac/ticket/11160, and http://trac.sagemath.org/sage_trac/ticket/10466, for instance.

( 2011-06-09 05:17:35 -0600 )edit

Sort by » oldest newest most voted

You can use myPlot1.set_axes_range to accomplish some of what you want, and I think there are other specific methods for setting particular options--hopefully the ones you're interested in :) Also, additional arguments given to graphics_array.show (e.g. axes and aspect_ratio) will be passed to each of the individual plots, so you can use that if there are some options you want to apply to all of the plots.

more

Thanks for that. The tip about set_axes_range allowed me to remove one of the 'myPlotx.show()' operations. Unfortunately, since I want a different aspect_ratio between the two plots, I couldn't eliminate the other.

( 2011-06-09 06:36:41 -0600 )edit

If you use .save() instead of .show(), do the options still get set for graphics_array?

( 2011-06-09 08:32:19 -0600 )edit

Actually, now I've done more experiments I realise that .show() wasn't actually helping me to control the aspect_ratio of myPlot2 within the graphics_array. I thought it did, but it was just that by default it gave me an aspect ratio close to 1.0, which by eye I assumed was exactly 1.0, but it wasn't. So I will get the aspect_ratio I ask for in the .show() operation, but it doesn't seem to influence what I get in the graphics_array.show(). As for .save(), in terms of what I see on the screen, I seem to get the same as .show(). The set_axes_range was the top tip which means that things work well enough for my purposes now without needing any myPlotx.show() statements. So thanks for that.

( 2011-06-09 09:23:06 -0600 )edit

well, glad I could help; as @kcrisman mentioned, graphics_array is unsatisfactory in many ways . . .

( 2011-06-09 10:08:47 -0600 )edit