Hello,

I just had a quick look at this problem. And I'm posting a quick
solution in case Christoper haven't dig it yet.


Index: lib/matplotlib/legend.py
===================================================================
--- lib/matplotlib/legend.py    (revision 6138)
+++ lib/matplotlib/legend.py    (working copy)
@@ -532,7 +532,11 @@
         # Set the data for the legend patch
         bbox = self._get_handle_text_bbox(renderer)

-        bbox = bbox.expanded(1 + self.pad, 1 + self.pad)
+        #bbox = bbox.expanded(1 + self.pad, 1 + self.pad)
+        bbox = bbox.transformed(self.get_transform())
+        bbox = bbox.padded(self.pad*self.fontsize)
+        bbox = bbox.inverse_transformed(self.get_transform())
+
         l, b, w, h = bbox.bounds
         self.legendPatch.set_bounds(l, b, w, h)



The problem is already well explained by Eric. And my solution is to
interpret the legend.pad as a fraction of the textsize (pad=0.3 seems
to work fine in my eyes). Note that this breaks the backward
compatibility. I personally think the original behavior may have
produced unsatisfactory results in most of the cases and keeping it as
a default may not be a good idea. While I hope others come out with an
elegant solution, I prefer to break the API in this case.

Regards,

-JJ



On Tue, Sep 30, 2008 at 3:38 PM, Eric Firing <[EMAIL PROTECTED]> wrote:
> Christopher Brown wrote:
>> Sorry, meant to send to the list...
>>
>> Hi Eric,
>>
>> EF> > the vertical padding is too large in the first
>> EF> > legend, and too small in the second.
>> EF>
>> EF> This looks to me like a design flaw: the pad is "fractional"
>> EF> (fraction  of legend box size), when logically it should be in
>> EF> something like units  of legend text height, or possibly in points.
>> EF> This might be easy enough  to change, although for backwards
>> EF> compatibility we would need to use a  new kwarg.
>>
>> Could you point me to the function where this change needs to occur? I'd
>> like to hack at it, because I have deadline for a figure. I'm searching
>> around in legend.py, is that where I should be looking?
>
> Yes, that is the place.  In principle it should be easy to fix, and
> maybe it is...or maybe it isn't.  It will certainly have to do with
> transforms, and using the right one the right way in the right place.
>
>>
>> Also, why would a new kwarg be necessary? If the change simply means
>> that the vertical padding is computed correctly, how would that break
>> backward compatibility?
>>
>
> Because the workaround is to fiddle with the pad value for each
> individual case to make the plot look right, so scripts with that
> workaround would fail if suddenly the pad kwarg were to be interpreted
> in sane units.
>
> The new kwarg could be "pad_units", as a modifier for the pad kwarg.  Or
> something like a "padpoints" kwarg could be introduced as an overlapping
> replacement. Or we could just break the API and hope it doesn't cause
> too much trouble.  I am not sure what the right approach is in this
> case.  I'm also not sure whether this is the only place where a "pad"
> value is still in poorly-chosen units. There was another such case that
> we fixed quite a long time ago.
>
> Eric
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to