2 possible bugs with make_axes_area_auto_adjustable

Jae-Joon’s code, make_axes_area_auto_adjustable has been a great help to dynamically resizing my plots’ axes area–such an improvement. But there are two bugs I’ve noticed that I wonder if has been identified/fixed yet:

  1. When I point-pick on the plot, the plot area still “jumps” (expands vertically a small amount). It used to do this each time I point-picked, but after upgrading MPL it now just does it the first time only. But is it possible it can be fixed so it doesn’t jump at all?

  2. I just noticed that if a plot is resized so that the window that the plot is embedded in is narrower than the title on the plot, the resizing of the axes area gets very messed up (it gets *much8 narrower than is necessary to fit the available area). I’m not sure what the best approach to fixing this is, since it’s not ideal to have a title not fit the figure’s area, either…is it possible to flow-wrap a plot title?

Thanks,
Che

I noticed what is causing one of these issues:

  1. When I point-pick on the plot, the plot area still “jumps” (expands vertically a small amount). It used to do this each time I point-picked, but after upgrading MPL it now just does it the first time only. But is it possible it can be fixed so it doesn’t jump at all?

I see why this happens. When I point pick, a popup window pops up and covers the plot. I think this triggers a redraw. What causes the jump in my case is that the plot’s title is set, in y coordinate, to 1.04. That is, the line is this:

    self.subplot.title.set_y(1.04)

This is interacting with the line in make_axes_area_auto_adjustable:

if self.title.get_visible():
    artists.append(self.title)

Essentially, it is getting the bbox, taking into consideration the plot’s title and other artists. But if the title is set to greater than 1.00, when I point pick (and force a redraw?), it has to recalculate the plot’s axes areas and it adjusts things, so the user sees the small vertical expansion (“jump”).

The problem goes away if I set the plot’s title to 1.00:

    self.subplot.title.set_y(1.00)

However, this puts the title too close to the top of the plot area for my aesthetic liking. I’d prefer a little larger margin.

There should be a simple fix that allows for the title to be a bit higher off the plot area and yet not cause this jump. It would be in the code at the end of this email, but i don’t know enough about bbox to fix it yet…any hints?

Thanks,
Che

def axes_get_tightbbox(self, renderer):
“”"
return the tight bounding box of the axes.
The dimension of the Bbox in canvas coordinate.
“”"

artists = []
bb = []

artists.append(self)

if self.title.get_visible():
    artists.append(self.title)

if self.xaxis.get_visible():
    artists.append(self.xaxis.label)

    bbx1, bbx2 = axis_get_ticklabel_extents(self.xaxis, renderer, True)
    bb.extend([bbx1, bbx2])
if self.yaxis.get_visible():
    artists.append(self.yaxis.label)
    bby1, bby2 = axis_get_ticklabel_extents(self.yaxis, renderer, True)

    bb.extend([bby1, bby2])

bb.extend([c.get_window_extent(renderer) for c in artists if c.get_visible()])

_bbox = mtransforms.Bbox.union([b for b in bb if b.width!=0 or b.height!=0])

return _bbox

I have a workaround for this, which is just using a tip from Jae Joon to me* from 3 years ago (!). Instead of setting the title offset as shown above, I set it in this fashion:

self.subplot.titleOffsetTrans._t = (0., 20.0/72.)

self.subplot.titleOffsetTrans.invalidate()

And then this somehow doesn’t interact with the make_axes_area_auto_
adjustable function.

One problem down. (I hope it is OK that I am answering my own questions, but didn’t want to leave them out there and have others bother to work on it).

-Che

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

···

On Mon, Feb 13, 2012 at 12:48 PM, C M <cmpython@…1896…> wrote:

I noticed what is causing one of these issues:

  1. When I point-pick on the plot, the plot area still “jumps” (expands vertically a small amount). It used to do this each time I point-picked, but after upgrading MPL it now just does it the first time only. But is it possible it can be fixed so it doesn’t jump at all?

I see why this happens. When I point pick, a popup window pops up and covers the plot. I think this triggers a redraw. What causes the jump in my case is that the plot’s title is set, in y coordinate, to 1.04. That is, the line is this:

    self.subplot.title.set_y(1.04)

This is interacting with the line in make_axes_area_auto_adjustable:

if self.title.get_visible():
    artists.append(self.title)