|
From: Eric F. <ef...@ha...> - 2015-02-19 07:19:26
|
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 <jga...@gm...
> <mailto:jga...@gm...>> 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
> Mat...@li...
> <mailto:Mat...@li...>
> 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
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
|