Ask Your Question
1

How to control layouts of individual plots within a graphics_array?

asked 2011-06-09 10:42:41 +0100

deebs67 gravatar image

updated 2011-06-09 12:12:23 +0100

kcrisman gravatar image

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 flag offensive close merge delete

Comments

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.

kcrisman gravatar imagekcrisman ( 2011-06-09 12:17:35 +0100 )edit

1 Answer

Sort by ยป oldest newest most voted
1

answered 2011-06-09 12:22:28 +0100

niles gravatar image

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.

edit flag offensive delete link more

Comments

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.

deebs67 gravatar imagedeebs67 ( 2011-06-09 13:36:41 +0100 )edit

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

niles gravatar imageniles ( 2011-06-09 15:32:19 +0100 )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.

deebs67 gravatar imagedeebs67 ( 2011-06-09 16:23:06 +0100 )edit

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

niles gravatar imageniles ( 2011-06-09 17:08:47 +0100 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2011-06-09 10:42:41 +0100

Seen: 2,201 times

Last updated: Jun 09 '11