First time here? Check out the FAQ!

Ask Your Question
1

How to control layouts of individual plots within a graphics_array?

asked 13 years ago

deebs67 gravatar image

updated 13 years ago

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?

Preview: (hide)

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 ( 13 years ago )

1 Answer

Sort by » oldest newest most voted
1

answered 13 years ago

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.

Preview: (hide)
link

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 ( 13 years ago )

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

niles gravatar imageniles ( 13 years ago )

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 ( 13 years ago )

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

niles gravatar imageniles ( 13 years ago )

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: 13 years ago

Seen: 2,285 times

Last updated: Jun 09 '11