While I agree the behavior here is not optimal, I don't think the fix
is right. axhline already tells the axes not to autoscale in the x
direction, as it should
l, = self.plot([xmin,xmax], [y,y], transform=trans, scalex=False, **kwargs)
so I don't think automatically forcing the autoscale off entirely for
x and y as in your patch is what we want in general. For example,
consider this case
plot([1,2,3])
ylim(-4,4)
axhline(20)
What we want is to autoscale only if autoscale_on=True *and* the hline
is outside the current bounds. Something like:
ymin, ymax = self.get_ylim()
if ymax<ymin: ymin, ymax = ymax, ymin
scaley = (y<ymin) or (y>ymax)
trans = mtransforms.blended_transform_factory(
self.transAxes, self.transData)
l, = self.plot([xmin,xmax], [y,y], transform=trans,
scalex=False, scaley=scaley, **kwargs)
I just committed this to svn in r5141 so give it a test drive and let
me know what you think.
There is an unrelated problem with the autoscaler which is that in the example
plot([1,2,3])
axhline(20)
it sets ymax to 20 making the hline invisible. We should probably
force the ylimits to be strictly outside the data limits in some cases
when autoscaling.
JDH
···
On Thu, May 15, 2008 at 3:41 AM, Friedrich Hagedorn <friedrich_h@...380...> wrote:
On Thu, May 15, 2008 at 10:20:23AM +0200, Friedrich Hagedorn wrote:
Hello,
I think the following is'nt right:
In [1]: plot([1,2,3])
Out[1]: [<matplotlib.lines.Line2D object at 0x8f9b0ec>]
In [2]: ylim(-4,4)
Out[2]: (-4, 4)
In [3]: axhline()
Out[3]: <matplotlib.lines.Line2D object at 0x8f9bc0c>