The recent version of the mpl now supports multi-column legend.

http://matplotlib.sourceforge.net/examples/pylab_examples/legend_demo3.html

Thus, it would be great if you to try the new version, and if your
problem is still not solved, please report it again.

Regards,

-JJ


On Sun, Apr 12, 2009 at 11:12 PM, Vasileios Kontorinis
<bkontori...@gmail.com> wrote:
> Jae-Joon hi,
>
>   I am a newbie with matplolib.  I need a horizontal legend because my
> figures are pretty wide and I need to automate the process of generating it.
>
> Since matplotlib does not support horizontal legends I am hacking around it.
>
> I modified your example below. So the following works:
>
> from matplotlib.pylab import *
> from matplotlib.legend import Legend
> from matplotlib.patches import Rectangle
>
> #fig = figure()
> ax = gca()
> pl_list = []
> for i in range(10):
>     pl, = ax.plot(random(10))
>     pl_list.append(pl)
>
> xleg,yleg= 0.5,0.5
>
> l1 = Legend(ax, pl_list[0:1], "0", loc=1)
> hg1, wd1 = l1.get_frame().get_height(), l1.get_frame().get_width()
> l2 = Legend(ax, pl_list[1:2], "1", loc=1)
> hg2, wd2 = l2.get_frame().get_height(), l2.get_frame().get_width()
> l3 = Legend(ax, pl_list[2:3], "2", loc=1)
> hg3, wd3 = l3.get_frame().get_height(), l3.get_frame().get_width()
> l4 = Legend(ax, pl_list[3:4], "3", loc=1)
> hg4, wd4 = l4.get_frame().get_height(), l4.get_frame().get_width()
>
> total_height = hg1
> total_width = wd1+wd2+wd3+wd4
>
> print total_height, total_width
>
> l1 = Legend(ax, pl_list[0:1], "0", loc=(xleg, yleg))
> l2 = Legend(ax, pl_list[1:2], "1", loc=(xleg+wd1/5, yleg))
> l3 = Legend(ax, pl_list[2:3], "2", loc=(xleg+(wd1+wd2)/5, yleg))
> l4 = Legend(ax, pl_list[3:4], "3", loc=(xleg+(wd1+wd2+wd3)/5, yleg))
> l1.get_frame().set_visible(False) # make background frame of legends
> invisible
> l2.get_frame().set_visible(False)
> l3.get_frame().set_visible(False)
> l4.get_frame().set_visible(False)
>
> # make a large background frame
> rect = Rectangle((xleg, yleg), 0.45, 0.05, # adjust these values (in
> normalized axes coordinate)
>                  fc="w", ec="k",
>                  transform=ax.transAxes, zorder=4)
> ax.add_artist(rect)
> ax.add_artist(l1)
> ax.add_artist(l2)
> ax.add_artist(l3)
> ax.add_artist(l4)
>
>
> The basic idea is to create a legend with the line and label I need and then
> use its dimensions to create the background frame.
>
> The problem is that the height and width I get are in different units that
> the normalized axes coordinates and I do not know how
>
> to properly transfrom them which leads to the hacky  /5   , otherwise the
> legends are off the figure.
>
> Any suggestions on how I can automate this part?
>
> Thanks in advance.
>
>
> Jae-Joon Lee
> Thu, 09 Oct 2008 12:21:56 -0700
>
> Although I think it is possible to calculate the bounding box of the
> all legends automatically,
> Here is a manual way.
>
>
> from matplotlib.patches import Rectangle
>
> l1.get_frame().set_visible(False) # make background frame of legends
> invisible
>
> l2.get_frame().set_visible(False)
>
> # make a large background frame
> rect = Rectangle((0.05, 0.75), 0.3, 0.2, # adjust these values (in
> normalized axes coordinate)
>                  fc="w", ec="k",
>
>                  transform=ax.transAxes, zorder=4)
> ax.add_artist(rect)
>
> I hope this help,
>
> -JJ
>
>
>
>
> On Thu, Oct 9, 2008 at 2:43 PM, José Alexandre Nalon <[EMAIL PROTECTED]>
> wrote:
>> Hello,
>
>>
>> Em Thursday 09 October 2008 13:46:52 Jae-Joon Lee escreveu:
>>> Meanwhile, you may try to make multiple legends as a posible workarounds.
>>
>> Thanks for your answer. That did the trick, and the figure
>
>> looks more or less as I wanted. It would look exactly as I
>> wanted if I could remove the border from the legends and
>> draw a box around the legends. How could I do that?
>>
>> (I apologize if this seems trivial. I use matplotlib a lot,
>
>> but standard functions always seem to do what I need, so I
>> don't go deep in its behaviour).
>>
>> --
>> José Alexandre Nalon
>> [EMAIL PROTECTED]
>>
>> -------------------------------------------------------------------------
>
>> 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
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by:
> High Quality Requirements in a Collaborative Environment.
> Download a free trial of Rational Requirements Composer Now!
> http://p.sf.net/sfu/www-ibm-com
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>

------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to