On Friday, February 3, 2012, Pål Gunnar Ellingsen <paalge@gmail.com> wrote:

> Hi

>

> I've got a plot, containing a graph.

> I would like to look at certain parts of it.

> To do this I zoom in on the x-axis using set_xlim()

> Then I would like to call autoscale(axis='y') and have matplotlib

> autoscale the y axis within the current x-axis.

>

> I've tried several ways of doing this, both with autoscale and set_ylim(auto=True)

> but non of them have been able to do this, as they only autoscale y on the full graph.

> In the end I ended up writing my own code for calculating the new ymin and ymax ans using set_ylim([ymin, ymax]),

> but I feel that this should not be necessary.

>

> While googling for the a solution I found an earlier e-mail on the matplotlib list,

> http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg19664.html

> which describes the same problem, but was never answered.

>

> Is there any other solution for this that I've missed?

>

> Regards

>

> Pål

>

Actually, the autoscaling is working as it should in your case. By default, automatic limits will encompass all data plotted.

The missing piece of your puzzle is specifying an aspect constraint. ax.set_aspect() will allow for some sort of relationship between the x and y axes to exist. For example, setting it to 'equal' means that limits are chosen such that a distance on the x axis is displayed the same way as the same distance in the y-axis. There are some other preset values and I think you can specify a float as well.

This is what I can remember of the top of my head. I hope this helps!

Ben Root