On 2015/02/18 7:51 AM, Ryan Nelson wrote:
> I don't have an answer to your question exactly. But I'll just say that
> this does make sense. The aspect-corrected axes (after show) is a subset
> of what you originally asked for, i.e. the bottom is higher, and the
> height is smaller. My guess is that this is not calculated until the
> final rendering on save on some computational effort. Otherwise, these
> values might need to be recalculated every time you add e.g. a colorbar.
> There is certainly a way to "trick" the plot into rendering, but I
> wonder if you could post a small (maybe two axes) version that
> demonstrates the effect your trying to accomplish. Perhaps someone might
> have a simpler/more robust solution.

There is an Axes method called apply_aspect() that is called by the 
Axes.draw() method.  Normally there is no need to call it before that, 
but I think you could do so.

I think the problem, though, is that until the figure is rendered to a 
real device or saved in a file, its dimensions in inches are not known, 
and apply_aspect needs that information.

Try including the figsize_inches kwarg when you make the figure, and 
then see if calling apply_aspect makes the position settle down to its 
final value.

Eric

>
> Ryan
>
> On Wed, Feb 18, 2015 at 4:27 AM, gdm <jgabor.as...@gmail.com
> <mailto:jgabor.as...@gmail.com>> wrote:
>
>     New matplotlib user here.  Sometimes I like to make figures with
>     multiple
>     axes, and have lines that cross multiple axes.  I've run in to
>     problems with
>     coordinates when doing this.  One such problem is that
>     axes.get_position()
>     seems to return incorrect coordinates for an axes with a fixed
>     aspect ratio.
>     However, after calling pyplot.show()  (or fig.savefig()), it returns the
>     correct coordinates.
>
>     Here is some example code:
>     #########################
>     import numpy
>     import matplotlib.pyplot as plt
>
>     # make up some data
>     x = numpy.arange(10)
>     y = numpy.sin(x)
>     y2 = numpy.cos(x)
>
>     # generate the figure
>     fig = plt.figure()
>
>     # setup the first axes
>     ax1 = fig.add_subplot(121)
>     plt.plot(x,y)
>
>     # setup the second axes with axis ratio
>     ax2 = fig.add_subplot(122, aspect=6)
>     plt.plot(x, y2)
>
>     # Print out the axes position after various operations
>     print "aaa", ax2.get_position()
>
>     plt.draw()
>     print "bbb", ax2.get_position()
>
>     fig.canvas.draw()
>     print "ccc", ax2.get_position()
>
>     plt.show(block=False)
>     print "yyy", ax2.get_position()
>     ##########################
>
>     Running this code produces the following output:
>     aaa Bbox('array([[ 0.54772727,  0.1       ],\n       [ 0.9       ,  0.9
>     ]])')
>     bbb Bbox('array([[ 0.54772727,  0.1       ],\n       [ 0.9       ,  0.9
>     ]])')
>     ccc Bbox('array([[ 0.54772727,  0.1       ],\n       [ 0.9       ,  0.9
>     ]])')
>     yyy Bbox('array([[ 0.54772727,  0.18686869],\n       [ 0.9       ,
>     0.81313131]])')
>
>     P.S.: I think this might be related to an issue noted here:
>     
> http://stackoverflow.com/questions/11900654/get-position-does-strange-things-when-using-a-colorbar
>
>
>
>
>
>     --
>     View this message in context:
>     
> http://matplotlib.1069221.n5.nabble.com/axes-get-position-inaccurate-until-after-savefig-tp44954.html
>     Sent from the matplotlib - users mailing list archive at Nabble.com.
>
>     
> ------------------------------------------------------------------------------
>     Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
>     from Actuate! Instantly Supercharge Your Business Reports and Dashboards
>     with Interactivity, Sharing, Native Excel Exports, App Integration &
>     more
>     Get technology previously reserved for billion-dollar corporations, FREE
>     
> http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
>     _______________________________________________
>     Matplotlib-users mailing list
>     Matplotlib-users@lists.sourceforge.net
>     <mailto:Matplotlib-users@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
>
>
> ------------------------------------------------------------------------------
> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
> with Interactivity, Sharing, Native Excel Exports, App Integration & more
> Get technology previously reserved for billion-dollar corporations, FREE
> http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
>
>
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to