Skip to content

Commit e50ff69

Browse files
committed
added bbox prop to text
svn path=/trunk/matplotlib/; revision=722
1 parent 600ba80 commit e50ff69

File tree

10 files changed

+71
-29
lines changed

10 files changed

+71
-29
lines changed

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
New entries should be added at the top
2+
2004-11-30 Added bbox property to text - JDH
3+
4+
2004-11-29 Added the over command to the matlab interface. over
5+
allows you to add an overlay plot regardless of hold
6+
state. - JDH
27

38
2004-11-25 Added Printf to mplutils for printf style format string
49
formatting in C++ (should help write better exceptions)

TODO

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,4 +593,10 @@ ZeroDivisionError: SeparableTransformation::eval_scalars yin interval is zero; c
593593

594594
-- Humufr's shared ticker bug
595595

596-
-- figure should increment the figure if one already exists
596+
-- figure should increment the figure if one already exists
597+
598+
-- majbase and minbase to plot
599+
600+
-- oplot
601+
602+
-- override setattr in matlab interface for artists.

lib/matplotlib/artist.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,11 @@ def set_visible(self, b):
129129
ACCEPTS: [True | False]
130130
"""
131131
self._visible = b
132+
133+
def update(self, props):
134+
for k,v in props.items():
135+
func = getattr(self, 'set_'+k, None)
136+
if func is None or not callable(func):
137+
raise AttributeError('Unknown property %s'%k)
138+
func(v)
139+
print 'set', k, v

lib/matplotlib/axes.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2297,7 +2297,7 @@ def set_title(self, label, fontdict=None, **kwargs):
22972297

22982298
self.title.set_text(label)
22992299
override = _process_text_args({}, fontdict, **kwargs)
2300-
self.title.update_properties(override)
2300+
self.title.update(override)
23012301
return self.title
23022302

23032303

@@ -2312,7 +2312,7 @@ def set_xlabel(self, xlabel, fontdict=None, **kwargs):
23122312
label = self.xaxis.get_label()
23132313
label.set_text(xlabel)
23142314
override = _process_text_args({}, fontdict, **kwargs)
2315-
label.update_properties(override)
2315+
label.update(override)
23162316
return label
23172317

23182318
def _send_xlim_event(self):
@@ -2396,7 +2396,7 @@ def set_ylabel(self, ylabel, fontdict=None, **kwargs):
23962396
label = self.yaxis.get_label()
23972397
label.set_text(ylabel)
23982398
override = _process_text_args({}, fontdict, **kwargs)
2399-
label.update_properties(override)
2399+
label.update(override)
24002400
return label
24012401

24022402
def set_ylim(self, v, emit=True):
@@ -2679,7 +2679,7 @@ def text(self, x, y, s, fontdict=None, **kwargs):
26792679
)
26802680
self._set_artist_props(t)
26812681

2682-
t.update_properties(override)
2682+
t.update(override)
26832683
self.texts.append(t)
26842684

26852685
if t.get_clip_on(): t.set_clip_box(self.bbox)
@@ -3040,7 +3040,7 @@ def set_rgrids(self, radii, labels=None, angle=22.5, **kwargs):
30403040
fontproperties=props, color=color,
30413041
horizontalalignment='center', verticalalignment='center')
30423042
t.set_transform(self.transData)
3043-
t.update_properties(kwargs)
3043+
t.update(kwargs)
30443044
self._set_artist_props(t)
30453045
t.set_clip_on(False)
30463046
self.rgridlabels.append(t)
@@ -3098,7 +3098,7 @@ def set_thetagrids(self, angles, labels=None, fmt='%d', frac = 1.1,
30983098
t = Text(a/180.*math.pi, r, l, fontproperties=props, color=color,
30993099
horizontalalignment='center', verticalalignment='center')
31003100
t.set_transform(self.transData)
3101-
t.update_properties(kwargs)
3101+
t.update(kwargs)
31023102
self._set_artist_props(t)
31033103
t.set_clip_on(False)
31043104
self.thetagridlabels.append(t)

lib/matplotlib/axis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,7 @@ def set_ticklabels(self, ticklabels, *args, **kwargs):
678678
ret = []
679679
for i, tick in enumerate(self.get_major_ticks()):
680680
if i<len(ticklabels): ret.append(tick.label1)
681-
tick.label1.update_properties(override)
681+
tick.label1.update(override)
682682
return ret
683683

684684
def set_ticks(self, ticks):

lib/matplotlib/figure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ def text(self, x, y, s, *args, **kwargs):
312312
x=x, y=y, text=s,
313313
)
314314

315-
t.update_properties(override)
315+
t.update(override)
316316
self._set_artist_props(t)
317317
self.texts.append(t)
318318
return t

lib/matplotlib/matlab.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1401,7 +1401,7 @@ def xticks(*args, **kwargs):
14011401
else: raise RuntimeError('Illegal number of arguments to xticks')
14021402
if len(kwargs):
14031403
for l in labels:
1404-
l.update_properties(kwargs)
1404+
l.update(kwargs)
14051405

14061406
draw_if_interactive()
14071407
return locs, labels
@@ -1536,7 +1536,7 @@ def yticks(*args, **kwargs):
15361536
else: raise RuntimeError('Illegal number of arguments to yticks')
15371537
if len(kwargs):
15381538
for l in labels:
1539-
l.update_properties(kwargs)
1539+
l.update(kwargs)
15401540

15411541
draw_if_interactive()
15421542

@@ -1555,3 +1555,14 @@ def polar(*args, **kwargs):
15551555

15561556
ax = gca(polar=True)
15571557
return ax.plot(*args, **kwargs)
1558+
1559+
1560+
def over(func, *args, **kwargs):
1561+
"""
1562+
Call func(*args, **kwargs) with hold(True) and then restore the hold state
1563+
"""
1564+
h = ishold()
1565+
hold(True)
1566+
func(*args, **kwargs)
1567+
hold(h)
1568+

lib/matplotlib/patches.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from matplotlib import rcParams
44
from numerix import array, arange, sin, cos, pi, Float
55
from artist import Artist
6-
from cbook import True, False, enumerate
6+
from cbook import True, False, enumerate, popd
77
from colors import colorConverter
88
from transforms import bound_vertices
99

@@ -122,7 +122,7 @@ def draw(self, renderer):
122122
tverts = self._transform.seq_xy_tups(verts)
123123

124124
renderer.draw_polygon(gc, rgbFace, tverts)
125-
if 0: bbox_artist(self, renderer)
125+
126126
#renderer.close_group('patch')
127127

128128
def get_verts(self):
@@ -323,23 +323,32 @@ def __init__(self, xy, radius=5,
323323
orientation=0,
324324
**kwargs)
325325

326-
def bbox_artist(artist, renderer):
326+
def bbox_artist(artist, renderer, props=None):
327327
"""
328328
This is a debug function to draw a rectangle around the bounding
329329
box returned by get_window_extent of an artist, to test whether
330330
the artist is returning the correct bbox
331-
"""
332331
332+
props is a dict of rectangle props with the additional property
333+
'pad' that sets the padding around the bbox in points
334+
"""
335+
if props is None: props = {}
336+
pad = popd(props, 'pad', 4)
337+
pad = renderer.points_to_pixels(pad)
333338
bbox = artist.get_window_extent(renderer)
334339
l,b,w,h = bbox.get_bounds()
340+
l-=pad/2.
341+
b-=pad/2.
342+
w+=pad
343+
h+=pad
335344
r = Rectangle(xy=(l,b),
336345
width=w,
337346
height=h,
338-
fill=False,
339347
)
340348
r.set_clip_on( False )
349+
r.update(props)
341350
r.draw(renderer)
342-
351+
343352

344353
def draw_bbox(bbox, renderer, color='k', trans=None):
345354
"""

lib/matplotlib/table.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def get_required_width(self, renderer):
140140

141141
def set_text_props(self, **kwargs):
142142
'update the text properties with kwargs'
143-
self._text.update_properties(kwargs)
143+
self._text.update(kwargs)
144144

145145
class Table(Artist):
146146
"""

lib/matplotlib/text.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import matplotlib
77
import math
88
from artist import Artist
9-
from cbook import True, False, enumerate
9+
from cbook import True, False, enumerate, popd
1010
from font_manager import FontProperties
1111
from matplotlib import rcParams
1212
from patches import bbox_artist
@@ -55,7 +55,8 @@ def __init__(self,
5555
self._multialignment = multialignment
5656
self._rotation = rotation
5757
self._fontproperties = fontproperties
58-
58+
self._bbox = None
59+
5960
def _get_multialignment(self):
6061
if self._multialignment is not None: return self._multialignment
6162
else: return self._horizontalalignment
@@ -194,6 +195,14 @@ def _get_layout(self, renderer):
194195
return ret
195196

196197

198+
def set_bbox(self, rectprops):
199+
"""
200+
Draw a bounding box around self. rect props are any settable
201+
properties for a rectangle, eg color='r', alpha=0.5
202+
203+
ACCEPTS: rectangle prop dict plus key 'pad' which is a pad in points
204+
"""
205+
self._bbox = rectprops
197206

198207
def draw(self, renderer):
199208
if self._text=='': return
@@ -205,7 +214,9 @@ def draw(self, renderer):
205214
gc.set_clip_rectangle(self.clipbox.get_bounds())
206215

207216

208-
if 0: bbox_artist(self, renderer)
217+
218+
if self._bbox:
219+
bbox_artist(self, renderer, self._bbox)
209220
angle = self.get_rotation()
210221
bbox, info = self._get_layout(renderer)
211222

@@ -507,14 +518,6 @@ def set_text(self, s):
507518
self._text = s
508519

509520

510-
def update_properties(self, d):
511-
"Update the font attributes with the dictionary in d"
512-
for k,v in d.items():
513-
val = d[k]
514-
funcname = 'set_' + k
515-
assert(hasattr(self, funcname))
516-
func = getattr(self, funcname)
517-
func(val)
518521

519522

520523
def is_math_text(self):

0 commit comments

Comments
 (0)