8000 ENH: add property precedence · matplotlib/matplotlib@790d909 · GitHub
[go: up one dir, main page]

Skip to content

Commit 790d909

Browse files
committed
ENH: add property precedence
Add the ability to set the precedence of properties when updating multiple properties on once. This adds a class-level attribute `Artist._prop_order` which is a dictionary keyed on property names with integer values. When using `set` or `setp` the properties will be applied in descending order by value then by name.
1 parent 0ea5fff commit 790d909

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

lib/matplotlib/artist.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ class Artist(object):
8383

8484
aname = 'Artist'
8585
zorder = 0
86+
# order of precedence when bulk setting/updating properties
87+
# via update. The keys should be property names and the values
88+
# integers
89+
_prop_order = dict(color=-1)
8690

8791
def __init__(self):
8892
self._stale = True
@@ -942,7 +946,11 @@ def properties(self):
942946
def set(self, **kwargs):
943947
"""A property batch setter. Pass *kwargs* to set properties.
944948
"""
945-
return self.update(kwargs)
949+
props = OrderedDict(
950+
sorted(kwargs.items(), reverse=True,
951+
key=lambda x: (self._prop_order.get(x[0], 0), x[0])))
952+
953+
return self.update(props)
946954

947955
def findobj(self, match=None, include_self=True):
948956
"""
@@ -1461,8 +1469,9 @@ def setp(obj, *args, **kwargs):
14611469
funcvals = OrderedDict()
14621470
for i in range(0, len(args) - 1, 2):
14631471
funcvals[args[i]] = args[i + 1]
1472+
14641473
ret = [o.update(funcvals) for o in objs]
1465-
ret.extend([o.update(kwargs) for o in objs])
1474+
ret.extend([o.set(**kwargs) for o in objs])
14661475
return [x for x in cbook.flatten(ret)]
14671476

14681477

0 commit comments

Comments
 (0)
0