On Thu, Apr 7, 2011 at 10:41 AM, Jeroen DR <voetsjoeba+mplus...@gmail.com>wrote:

> Hi,
>
> I'm using the method described on
> http://matplotlib.sourceforge.net/faq/howto_faq.html#howto-auto-adjust
> to automatically adjust my subplot figures to make room for my axis
> labels. I'm not drawing my graphs to the screen, but I'm instead
> outputting them to PNG files using a savefig("filename.png", dpi=100) call.
>
> I'm on a Ubuntu 9.04 Jaunty Jackalope system, so I originally used the
> python-matplotlib package for convenience, which contains matplotlib
> 0.98.5.2. However, I later also needed the option to move my legend on
> top of my figure, which means that I had to upgrade to at least
> matplotlib 0.99.x since I would need the bbox_to_anchor kwarg for that.
> Naturally nothing higher than 0.98 is available for Ubuntu 9.04, so I
> went and installed MPL from source. That worked, until I discovered that
> now the draw_event no longer fires when I call savefig(). It still fires
> for show(), but for some reason, after installing from source, it no
> longer does. I made sure that I installed all of MPL's dependencies; the
> build report lists version numbers for all them where it didn't before,
> so I'm pretty sure those are all satisfied.
>
> Here's the test program I used, adapted directly from the sample code. I
> also tried adding in manual fig.canvas.draw() calls to try and trigger
> the event manually, which seemingly are all happily ignored.
>
> import matplotlib.pyplot as plt
> import matplotlib.transforms as mtransforms
> fig = plt.figure()
> ax = fig.add_subplot(111)
> ax.plot(range(10))
> ax.set_yticks((2,5,7))
> labels = ax.set_yticklabels(('really, really, really', 'long', 'labels'))
>
> def on_draw(event):
>    print "on_draw"
>    bboxes = []
>    for label in labels:
>        bbox = label.get_window_extent()
>        # the figure transform goes from relative coords->pixels and we
>        # want the inverse of that
>        bboxi = bbox.inverse_transformed(fig.transFigure)
>        bboxes.append(bboxi)
>
>    # this is the bbox that bounds all the bboxes, again in relative
>    # figure coords
>    bbox = mtransforms.Bbox.union(bboxes)
>    if fig.subplotpars.left < bbox.width:
>        # we need to move it over
>        fig.subplots_adjust(left=1.1*bbox.width) # pad a little
>        fig.canvas.draw()
>    return False
>
> fig.canvas.mpl_connect('draw_event', on_draw)
>
> #plt.show()                            # this fires draw_event
> plt.savefig('delete_me.png', dpi=100)  # this doesn't
>
> Convinced this was a bug, I then tried compiling a whole bunch of
> different versions from source to see what version it stopped working
> at. It didn't work for any of them, including the 0.98.5.x builds.
> Finally, I tried grabbing python-matplotlib's matplotlibrc file and
> using it to override the compiled version's RC file with, and lo:
> draw_event fires again.
>
> I'm not very familiar with MPL's internals so I'm sure there's a reason
> for this (one thing I immediately noticed was that the DEB RC file seems
> to use the TkAgg backend, whereas the compiled version uses the GTKAgg
> backend). However, it feels to me like whether or not a "user-mode"
> event fires or not should not depend on some configuration settings.
>
> I've yet to figure out which setting exactly causes draw_event to fail,
> but I just wanted to let you guys know; might be a good idea to tweak
> the default settings so that draw_event behaves as expected.
>
> Cheers,
> Jeroen DR
>
>
I wonder if this is backend-dependent.  Which backend are you using for the
installs from source?

Ben Root
------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to