Revision: 6914
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6914&view=rev
Author: leejjoon
Date: 2009-02-15 00:12:19 +0000 (Sun, 15 Feb 2009)
Log Message:
-----------
Legend title support
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/examples/pylab_examples/legend_demo3.py
trunk/matplotlib/lib/matplotlib/legend.py
trunk/matplotlib/lib/matplotlib/offsetbox.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2009-02-13 18:21:37 UTC (rev 6913)
+++ trunk/matplotlib/CHANGELOG 2009-02-15 00:12:19 UTC (rev 6914)
@@ -1,3 +1,5 @@
+2009-02-14 Added the legend title support - JJL
+
2009-02-10 Fixed a bug in backend_pdf so it doesn't break when the setting
pdf.use14corefonts=True is used. Added test case in
unit/test_pdf_use14corefonts.py. - NGR
Modified: trunk/matplotlib/examples/pylab_examples/legend_demo3.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/legend_demo3.py 2009-02-13
18:21:37 UTC (rev 6913)
+++ trunk/matplotlib/examples/pylab_examples/legend_demo3.py 2009-02-15
00:12:19 UTC (rev 6914)
@@ -18,9 +18,9 @@
ax2 = plt.subplot(3,1,2)
myplot(ax2)
-ax2.legend(loc=1, ncol=2, shadow=True)
+ax2.legend(loc=1, ncol=2, shadow=True, title="Legend")
+ax2.get_legend().get_title().set_color("red")
-
ax3 = plt.subplot(3,1,3)
myplot(ax3)
ax3.legend(loc=1, ncol=4, mode="expand", shadow=True)
Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py 2009-02-13 18:21:37 UTC (rev
6913)
+++ trunk/matplotlib/lib/matplotlib/legend.py 2009-02-15 00:12:19 UTC (rev
6914)
@@ -110,7 +110,8 @@
mode=None, # mode for horizontal distribution of columns.
None, "expand"
fancybox=None, # True use a fancy box, false use a rounded
box, none use rc
- shadow = None,
+ shadow = None,
+ title = None, # set a title for the legend
):
"""
- *parent* : the artist that contains the legend
@@ -135,6 +136,7 @@
handletextpad the pad between the legend handle and text
borderaxespad the pad between the axes and legend border
columnspacing the spacing between columns
+ title the legend title
================
==================================================================
The dimensions of pad and spacing are given as a fraction of the
@@ -276,6 +278,8 @@
# init with null renderer
self._init_legend_box(handles, labels)
+ self.set_title(title)
+
self._last_fontsize_points = self._fontsize
@@ -316,6 +320,7 @@
renderer.open_group('legend')
+
# find_offset function will be provided to _legend_box and
# _legend_box will draw itself at the location of the return
# value of the find_offset.
@@ -562,11 +567,19 @@
sep = self.columnspacing*fontsize
- self._legend_box = HPacker(pad=self.borderpad*fontsize,
- sep=sep, align="baseline",
- mode=mode,
- children=columnbox)
+ self._legend_handle_box = HPacker(pad=0,
+ sep=sep, align="baseline",
+ mode=mode,
+ children=columnbox)
+ self._legend_title_box = TextArea("")
+
+ self._legend_box = VPacker(pad=self.borderpad*fontsize,
+ sep=self.labelspacing*fontsize,
+ align="center",
+ children=[self._legend_title_box,
+ self._legend_handle_box])
+
self._legend_box.set_figure(self.figure)
self.texts = text_list
@@ -640,6 +653,19 @@
'return a list of text.Text instance in the legend'
return silent_list('Text', self.texts)
+ def set_title(self, title):
+ 'set the legend title'
+ self._legend_title_box._text.set_text(title)
+
+ if title:
+ self._legend_title_box.set_visible(True)
+ else:
+ self._legend_title_box.set_visible(False)
+
+ def get_title(self):
+ 'return Text instance for the legend title'
+ return self._legend_title_box._text
+
def get_window_extent(self):
'return a extent of the the legend'
return self.legendPatch.get_window_extent()
Modified: trunk/matplotlib/lib/matplotlib/offsetbox.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/offsetbox.py 2009-02-13 18:21:37 UTC
(rev 6913)
+++ trunk/matplotlib/lib/matplotlib/offsetbox.py 2009-02-15 00:12:19 UTC
(rev 6914)
@@ -174,6 +174,12 @@
"""
self.height = height
+ def get_visible_children(self):
+ """
+ Return a list of visible artists it contains.
+ """
+ return [c for c in self._children if c.get_visible()]
+
def get_children(self):
"""
Return a list of artists it contains.
@@ -208,7 +214,7 @@
px, py = self.get_offset(width, height, xdescent, ydescent)
- for c, (ox, oy) in zip(self.get_children(), offsets):
+ for c, (ox, oy) in zip(self.get_visible_children(), offsets):
c.set_offset((px+ox, py+oy))
c.draw(renderer)
@@ -281,7 +287,12 @@
pad = self.pad * dpicor
sep = self.sep * dpicor
- whd_list = [c.get_extent(renderer) for c in self.get_children()]
+ if self.width is not None:
+ for c in self.get_visible_children():
+ if isinstance(c, PackerBase) and c.mode == "expand":
+ c.set_width(self.width)
+
+ whd_list = [c.get_extent(renderer) for c in
self.get_visible_children()]
whd_list = [(w, h, xd, (h-yd)) for w, h, xd, yd in whd_list]
@@ -341,7 +352,7 @@
pad = self.pad * dpicor
sep = self.sep * dpicor
- whd_list = [c.get_extent(renderer) for c in self.get_children()]
+ whd_list = [c.get_extent(renderer) for c in
self.get_visible_children()]
if self.height is None:
height_descent = max([h-yd for w,h,xd,yd in whd_list])
@@ -520,6 +531,14 @@
self._minimumdescent = minimumdescent
+ def set_text(self, s):
+ "set text"
+ self._text.set_text(s)
+
+ def get_text(self):
+ "get text"
+ return self._text.get_text()
+
def set_multilinebaseline(self, t):
"""
Set multilinebaseline .
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins