Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 411cfac

Browse files
committed
Add legend.labelcolor in rcParams
1 parent 93e716d commit 411cfac

File tree

6 files changed

+133
-2
lines changed

6 files changed

+133
-2
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
New rcParams for legend: set legend labelcolor globally
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
4+
The new :rc:`legend.labelcolor` works as a global *labelcolor* argument in the
5+
`.pyplot.legend`. Thus, ``legend.labelcolor`` allows valid color string
6+
(e.g., 'black') toggle. Alternatively use 'linecolor', 'markerfacecolor'
7+
(or 'mfc'), or 'markeredgecolor' (or 'mec') to match the color of the line marker
8+
9+
10+
.. plot::
11+
plt.rcParams['legend.labelcolor'] = 'linecolor'
12+
13+
# Make some fake data.
14+
a = np.arange(0, 3, .02)
15+
c = np.exp(a)
16+
d = c[::-1]
17+
18+
fig, ax = plt.subplots()
19+
ax.plot(a, c, 'g--', label='Model length')
20+
ax.plot(a, d, 'r:', label='Data length')
21+
22+
ax.legend()
23+
24+
plt.show()

lib/matplotlib/legend.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,8 +544,11 @@ def __init__(self, parent, handles, labels,
544544
'mec': ['get_markeredgecolor', 'get_edgecolor'],
545545
}
546546
if labelcolor is None:
547-
pass
548-
elif isinstance(labelcolor, str) and labelcolor in color_getters:
547+
if mpl.rcParams['legend.labelcolor'] != 'none':
548+
labelcolor = mpl.rcParams['legend.labelcolor']
549+
else:
550+
labelcolor = mpl.rcParams['text.color']
551+
if isinstance(labelcolor, str) and labelcolor in color_getters:
549552
getter_names = color_getters[labelcolor]
550553
for handle, text in zip(self.legendHandles, self.texts):
551554
for getter_name in getter_names:

lib/matplotlib/mpl-data/matplotlibrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,7 @@
530530
#legend.scatterpoints: 1 # number of scatter points
531531
#legend.markerscale: 1.0 # the relative size of legend markers vs. original
532532
#legend.fontsize: medium
533+
#legend.labelcolor: None
533534
#legend.title_fontsize: None # None sets to the same as the default axes.
534535

535536
## Dimensions as fraction of font size:

lib/matplotlib/rcsetup.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,17 @@ def validate_color_for_prop_cycle(s):
289289
return validate_color(s)
290290

291291

292+
def _validate_color_or_linecolor(s):
293+
if cbook._str_equal(s, 'linecolor'):
294+
return s
295+
elif cbook._str_equal(s, 'mfc') or cbook._str_equal(s, 'markerfacecolor'):
296+
return 'markerfacecolor'
297+
elif cbook._str_equal(s, 'mec') or cbook._str_equal(s, 'markeredgecolor'):
298+
return 'markeredgecolor'
299+
300+
return validate_color(s)
301+
302+
292303
def validate_color(s):
293304
"""Return a valid color arg."""
294305
if isinstance(s, str):
@@ -1017,6 +1028,8 @@ def _convert_validator_spec(key, conv):
10171028
"legend.scatterpoints": validate_int,
10181029
"legend.fontsize": validate_fontsize,
10191030
"legend.title_fontsize": validate_fontsize_None,
1031+
# color of the legend
1032+
"legend.labelcolor": _validate_color_or_linecolor,
10201033
# the relative size of legend markers vs. original
10211034
"legend.markerscale": validate_float,
10221035
"legend.shadow": validate_bool,

lib/matplotlib/tests/test_legend.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,84 @@ def test_legend_labelcolor_markerfacecolor():
643643
assert mpl.colors.same_color(text.get_color(), color)
644644

645645

646+
def test_legend_labelcolor_rcparam_single():
647+
# test the rcParams legend.labelcolor for a single color
648+
fig, ax = plt.subplots()
649+
ax.plot(np.arange(10), np.arange(10)*1, label='#1')
650+
ax.plot(np.arange(10), np.arange(10)*2, label='#2')
651+
ax.plot(np.arange(10), np.arange(10)*3, label='#3')
652+
653+
mpl.rcParams['legend.labelcolor'] = 'r'
654+
leg = ax.legend()
655+
for text in leg.get_texts():
656+
assert mpl.colors.same_color(text.get_color(), 'red')
657+
658+
659+
def test_legend_labelcolor_rcparam_linecolor():
660+
# test the rcParams legend.labelcolor for a linecolor
661+
fig, ax = plt.subplots()
662+
ax.plot(np.arange(10), np.arange(10)*1, label='#1', color='r')
663+
ax.plot(np.arange(10), np.arange(10)*2, label='#2', color='g')
664+
ax.plot(np.arange(10), np.arange(10)*3, label='#3', color='b')
665+
666+
mpl.rcParams['legend.labelcolor'] = 'linecolor'
667+
leg = ax.legend()
668+
for text, color in zip(leg.get_texts(), ['r', 'g', 'b']):
669+
assert mpl.colors.same_color(text.get_color(), color)
670+
671+
672+
def test_legend_labelcolor_rcparam_markeredgecolor():
673+
# test the labelcolor for labelcolor='markeredgecolor'
674+
fig, ax = plt.subplots()
675+
ax.plot(np.arange(10), np.arange(10)*1, label='#1', markeredgecolor='r')
676+
ax.plot(np.arange(10), np.arange(10)*2, label='#2', markeredgecolor='g')
677+
ax.plot(np.arange(10), np.arange(10)*3, label='#3', markeredgecolor='b')
678+
679+
mpl.rcParams['legend.labelcolor'] = 'markeredgecolor'
680+
leg = ax.legend()
681+
for text, color in zip(leg.get_texts(), ['r', 'g', 'b']):
682+
assert mpl.colors.same_color(text.get_color(), color)
683+
684+
685+
def test_legend_labelcolor_rcparam_markeredgecolor_short():
686+
# test the labelcolor for labelcolor='markeredgecolor'
687+
fig, ax = plt.subplots()
688+
ax.plot(np.arange(10), np.arange(10)*1, label='#1', markeredgecolor='r')
689+
ax.plot(np.arange(10), np.arange(10)*2, label='#2', markeredgecolor='g')
690+
ax.plot(np.arange(10), np.arange(10)*3, label='#3', markeredgecolor='b')
691+
692+
mpl.rcParams['legend.labelcolor'] = 'mec'
693+
leg = ax.legend()
694+
for text, color in zip(leg.get_texts(), ['r', 'g', 'b']):
695+
assert mpl.colors.same_color(text.get_color(), color)
696+
697+
698+
def test_legend_labelcolor_rcparam_markerfacecolor():
699+
# test the labelcolor for labelcolor='markeredgecolor'
700+
fig, ax = plt.subplots()
701+
ax.plot(np.arange(10), np.arange(10)*1, label='#1', markerfacecolor='r')
702+
ax.plot(np.arange(10), np.arange(10)*2, label='#2', markerfacecolor='g')
703+
ax.plot(np.arange(10), np.arange(10)*3, label='#3', markerfacecolor='b')
704+
705+
mpl.rcParams['legend.labelcolor'] = 'markerfacecolor'
706+
leg = ax.legend()
707+
for text, color in zip(leg.get_texts(), ['r', 'g', 'b']):
708+
assert mpl.colors.same_color(text.get_color(), color)
709+
710+
711+
def test_legend_labelcolor_rcparam_markerfacecolor_short():
712+
# test the labelcolor for labelcolor='markeredgecolor'
713+
fig, ax = plt.subplots()
714+
ax.plot(np.arange(10), np.arange(10)*1, label='#1', markerfacecolor='r')
715+
ax.plot(np.arange(10), np.arange(10)*2, label='#2', markerfacecolor='g')
716+
ax.plot(np.arange(10), np.arange(10)*3, label='#3', markerfacecolor='b')
717+
718+
mpl.rcParams['legend.labelcolor'] = 'mfc'
719+
leg = ax.legend()
720+
for text, color in zip(leg.get_texts(), ['r', 'g', 'b']):
721+
assert mpl.colors.same_color(text.get_color(), color)
722+
723+
646724
def test_get_set_draggable():
647725
legend = plt.legend()
648726
assert not legend.get_draggable()

lib/matplotlib/tests/test_rcparams.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
validate_bool,
1919
validate_color,
2020
validate_colorlist,
21+
_validate_color_or_linecolor,
2122
validate_cycler,
2223
validate_float,
2324
validate_fontweight,
@@ -330,6 +331,17 @@ def generate_validator_testcases(valid):
330331
('(0, 1, "0.5")', ValueError), # last one not a float
331332
),
332333
},
334+
{'validator': _validate_color_or_linecolor,
335+
'success': (('linecolor', 'linecolor'),
336+
('markerfacecolor', 'markerfacecolor'),
337+
('mfc', 'markerfacecolor'),
338+
('markeredgecolor', 'markeredgecolor'),
339+
('mec', 'markeredgecolor')
340+
),
341+
'fail': (('line', ValueError),
342+
('marker', ValueError)
343+
)
344+
},
333345
{'validator': validate_hist_bins,
334346
'success': (('auto', 'auto'),
335347
('fd', 'fd'),

0 commit comments

Comments
 (0)