Skip to content

Commit dabaf62

Browse files
committed
add tests for various corner cases of legends with labelcolor set to linecolor, e.g. ensuring that histograms with step histtype do not end up with an empty label
1 parent 2b75c9e commit dabaf62

File tree

1 file changed

+238
-0
lines changed

1 file changed

+238
-0
lines changed

lib/matplotlib/tests/test_legend.py

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,6 +1068,244 @@ def test_legend_labelcolor_rcparam_markerfacecolor_short():
10681068
assert mpl.colors.same_color(text.get_color(), color)
10691069

10701070

1071+
def test_legend_labelcolor_linecolor_histograms():
1072+
x = np.arange(10)
1073+
1074+
# testing c kwarg for bar, step, and stepfilled histograms
1075+
fig, ax = plt.subplots()
1076+
_, _, h = ax.hist(x, histtype='bar', color='r',
1077+
label="red bar hist with a red label")
1078+
leg = ax.legend(loc=1, labelcolor='linecolor')
1079+
tc = leg.texts[0].get_color()
1080+
assert mpl.colors.same_color(tc, 'r')
1081+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1082+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1083+
1084+
fig, ax = plt.subplots()
1085+
_, _, h = ax.hist(x, histtype='step', color='g',
1086+
label="green step hist with a green label")
1087+
leg = ax.legend(loc=1, labelcolor='linecolor')
1088+
tc = leg.texts[0].get_color()
1089+
assert mpl.colors.same_color(tc, 'g')
1090+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_edgecolor())
1091+
assert mpl.colors.same_color(tc, h[0].get_edgecolor())
1092+
1093+
fig, ax = plt.subplots()
1094+
_, _, h = ax.hist(x, histtype='stepfilled', color='b',
1095+
label="blue stepfilled hist with a blue label")
1096+
leg = ax.legend(loc=1, labelcolor='linecolor')
1097+
tc = leg.texts[0].get_color()
1098+
assert mpl.colors.same_color(tc, 'b')
1099+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1100+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1101+
1102+
# testing c, fc, and ec combinations for bar histograms
1103+
fig, ax = plt.subplots()
1104+
_, _, h = ax.hist(x, histtype='bar', color='r', ec='b',
1105+
label="red bar hist with blue edges and a red label")
1106+
leg = ax.legend(loc=1, labelcolor='linecolor')
1107+
tc = leg.texts[0].get_color()
1108+
assert mpl.colors.same_color(tc, 'r')
1109+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1110+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1111+
1112+
fig, ax = plt.subplots()
1113+
_, _, h = ax.hist(x, histtype='bar', fc='r', ec='b',
1114+
label="red bar hist with blue edges and a red label")
1115+
leg = ax.legend(loc=1, labelcolor='linecolor')
1116+
tc = leg.texts[0].get_color()
1117+
assert mpl.colors.same_color(tc, 'r')
1118+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1119+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1120+
1121+
fig, ax = plt.subplots()
1122+
_, _, h = ax.hist(x, histtype='bar', fc='none', ec='b',
1123+
label="unfilled blue bar hist with a blue label")
1124+
leg = ax.legend(loc=1, labelcolor='linecolor')
1125+
tc = leg.texts[0].get_color()
1126+
assert mpl.colors.same_color(tc, 'b')
1127+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_edgecolor())
1128+
assert mpl.colors.same_color(tc, h[0].get_edgecolor())
1129+
1130+
# testing c, and ec combinations for step histograms
1131+
fig, ax = plt.subplots()
1132+
_, _, h = ax.hist(x, histtype='step', color='r', ec='b',
1133+
label="blue step hist with a blue label")
1134+
leg = ax.legend(loc=1, labelcolor='linecolor')
1135+
tc = leg.texts[0].get_color()
1136+
assert mpl.colors.same_color(tc, 'b')
1137+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_edgecolor())
1138+
assert mpl.colors.same_color(tc, h[0].get_edgecolor())
1139+
1140+
fig, ax = plt.subplots()
1141+
_, _, h = ax.hist(x, histtype='step', ec='b',
1142+
label="blue step hist with a blue label")
1143+
leg = ax.legend(loc=1, labelcolor='linecolor')
1144+
tc = leg.texts[0].get_color()
1145+
assert mpl.colors.same_color(tc, 'b')
1146+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_edgecolor())
1147+
assert mpl.colors.same_color(tc, h[0].get_edgecolor())
1148+
1149+
# testing c, fc, and ec combinations for stepfilled histograms
1150+
fig, ax = plt.subplots()
1151+
_, _, h = ax.hist(x, histtype='stepfilled', color='r', ec='b',
1152+
label="red stepfilled hist, blue edges, red label")
1153+
leg = ax.legend(loc=1, labelcolor='linecolor')
1154+
tc = leg.texts[0].get_color()
1155+
assert mpl.colors.same_color(tc, 'r')
1156+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1157+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1158+
1159+
fig, ax = plt.subplots()
1160+
_, _, h = ax.hist(x, histtype='stepfilled', fc='r', ec='b',
1161+
label="red stepfilled hist, blue edges, red label")
1162+
leg = ax.legend(loc=1, labelcolor='linecolor')
1163+
tc = leg.texts[0].get_color()
1164+
assert mpl.colors.same_color(tc, 'r')
1165+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1166+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1167+
1168+
fig, ax = plt.subplots()
1169+
_, _, h = ax.hist(x, histtype='stepfilled', fc='none', ec='b',
1170+
label="unfilled blue stepfilled hist, blue label")
1171+
leg = ax.legend(loc=1, labelcolor='linecolor')
1172+
tc = leg.texts[0].get_color()
1173+
assert mpl.colors.same_color(tc, 'b')
1174+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_edgecolor())
1175+
assert mpl.colors.same_color(tc, h[0].get_edgecolor())
1176+
1177+
fig, ax = plt.subplots()
1178+
_, _, h = ax.hist(x, histtype='stepfilled', fc='r', ec='none',
1179+
label="edgeless red stepfilled hist with a red label")
1180+
leg = ax.legend(loc=1, labelcolor='linecolor')
1181+
tc = leg.texts[0].get_color()
1182+
assert mpl.colors.same_color(tc, 'r')
1183+
assert mpl.colors.same_color(tc, leg.get_patches()[0].get_facecolor())
1184+
assert mpl.colors.same_color(tc, h[0].get_facecolor())
1185+
plt.close('all')
1186+
1187+
1188+
def test_legend_labelcolor_linecolor_plot():
1189+
x = np.arange(5)
1190+
1191+
# testing line plot
1192+
fig, ax = plt.subplots()
1193+
p = ax.plot(x, c='r', label="red line with a red label")
1194+
leg = ax.legend(loc=1, labelcolor='linecolor')
1195+
tc = leg.texts[0].get_color()
1196+
assert mpl.colors.same_color(tc, 'r')
1197+
assert mpl.colors.same_color(tc, leg.get_lines()[0].get_color())
1198+
assert mpl.colors.same_color(tc, p[0].get_color())
1199+
1200+
# testing c, fc, and ec combinations for maker plots
1201+
fig, ax = plt.subplots()
1202+
p = ax.plot(x, 'o', c='r', label="red circles with a red label")
1203+
leg = ax.legend(loc=1, labelcolor='linecolor')
1204+
tc = leg.texts[0].get_color()
1205+
assert mpl.colors.same_color(tc, 'r')
1206+
assert mpl.colors.same_color(tc, leg.get_lines()[0].get_color())
1207+
assert mpl.colors.same_color(tc, p[0].get_color())
1208+
1209+
fig, ax = plt.subplots()
1210+
p = ax.plot(x, 'o', c='r', mec='b', label="red circles, blue edges, red label")
1211+
leg = ax.legend(loc=1, labelcolor='linecolor')
1212+
tc = leg.texts[0].get_color()
1213+
assert mpl.colors.same_color(tc, 'r')
1214+
assert mpl.colors.same_color(tc, leg.get_lines()[0].get_color())
1215+
assert mpl.colors.same_color(tc, p[0].get_color())
1216+
1217+
fig, ax = plt.subplots()
1218+
p = ax.plot(x, 'o', mfc='r', mec='b', label="red circles, blue edges, red label")
1219+
leg = ax.legend(loc=1, labelcolor='linecolor')
1220+
tc = leg.texts[0].get_color()
1221+
assert mpl.colors.same_color(tc, 'r')
1222+
assert mpl.colors.same_color(tc, leg.get_lines()[0].get_markerfacecolor())
1223+
assert mpl.colors.same_color(tc, p[0].get_markerfacecolor())
1224+
1225+
# 'none' cases
1226+
fig, ax = plt.subplots()
1227+
p = ax.plot(x, 'o', mfc='none', mec='b', label="blue unfilled circles, blue label")
1228+
leg = ax.legend(loc=1, labelcolor='linecolor')
1229+
tc = leg.texts[0].get_color()
1230+
assert mpl.colors.same_color(tc, 'b')
1231+
assert mpl.colors.same_color(tc, leg.get_lines()[0].get_markeredgecolor())
1232+
assert mpl.colors.same_color(tc, p[0].get_markeredgecolor())
1233+
1234+
fig, ax = plt.subplots()
1235+
p = ax.plot(x, 'o', mfc='r', mec='none', label="red edgeless circles, red label")
1236+
leg = ax.legend(loc=1, labelcolor='linecolor')
1237+
tc = leg.texts[0].get_color()
1238+
assert mpl.colors.same_color(tc, 'r')
1239+
assert mpl.colors.same_color(tc, leg.get_lines()[0].get_markerfacecolor())
1240+
assert mpl.colors.same_color(tc, p[0].get_markerfacecolor())
1241+
1242+
fig, ax = plt.subplots()
1243+
p = ax.plot(x, 'o', c='none', label="invisible circles with invisible label")
1244+
leg = ax.legend(loc=1, labelcolor='linecolor')
1245+
tc = leg.texts[0].get_color()
1246+
assert tc == 'none'
1247+
assert tc == leg.get_lines()[0].get_markerfacecolor()
1248+
assert tc == leg.get_lines()[0].get_markeredgecolor()
1249+
assert tc == leg.get_lines()[0].get_color()
1250+
assert tc == p[0].get_markerfacecolor()
1251+
assert tc == p[0].get_markeredgecolor()
1252+
assert tc == p[0].get_color()
1253+
plt.close('all')
1254+
1255+
1256+
def test_legend_labelcolor_linecolor_scatter():
1257+
x = np.arange(5)
1258+
1259+
# testing c, fc, and ec combinations for scatter plots
1260+
fig, ax = plt.subplots()
1261+
p = ax.scatter(x, x, c='r', label="red circles with a red label")
1262+
leg = ax.legend(loc=1, labelcolor='linecolor')
1263+
tc = leg.texts[0].get_color()
1264+
assert mpl.colors.same_color(tc, 'r')
1265+
assert mpl.colors.same_color(tc, leg.legend_handles[0].get_facecolor())
1266+
assert mpl.colors.same_color(tc, p.get_facecolor())
1267+
1268+
fig, ax = plt.subplots()
1269+
p = ax.scatter(x, x, c='r', ec='b', label="red circles, blue edges, red label")
1270+
leg = ax.legend(loc=1, labelcolor='linecolor')
1271+
tc = leg.texts[0].get_color()
1272+
assert mpl.colors.same_color(tc, 'r')
1273+
assert mpl.colors.same_color(tc, leg.legend_handles[0].get_facecolor())
1274+
assert mpl.colors.same_color(tc, p.get_facecolor())
1275+
1276+
fig, ax = plt.subplots()
1277+
p = ax.scatter(x, x, fc='r', ec='b', label="red circles, blue edges, red label")
1278+
leg = ax.legend(loc=1, labelcolor='linecolor')
1279+
tc = leg.texts[0].get_color()
1280+
assert mpl.colors.same_color(tc, 'r')
1281+
assert mpl.colors.same_color(tc, leg.legend_handles[0].get_facecolor())
1282+
assert mpl.colors.same_color(tc, p.get_facecolor())
1283+
1284+
# 'none' cases
1285+
fig, ax = plt.subplots()
1286+
p = ax.scatter(x, x, fc='none', ec='b', label="blue unfilled circles, blue label")
1287+
leg = ax.legend(loc=1, labelcolor='linecolor')
1288+
tc = leg.texts[0].get_color()
1289+
assert mpl.colors.same_color(tc, 'b')
1290+
assert mpl.colors.same_color(tc, leg.legend_handles[0].get_edgecolor())
1291+
assert mpl.colors.same_color(tc, p.get_edgecolor())
1292+
1293+
fig, ax = plt.subplots()
1294+
p = ax.scatter(x, x, fc='r', ec='none', label="red edgeless circles, red label")
1295+
leg = ax.legend(loc=1, labelcolor='linecolor')
1296+
tc = leg.texts[0].get_color()
1297+
assert mpl.colors.same_color(tc, 'r')
1298+
assert mpl.colors.same_color(tc, leg.legend_handles[0].get_facecolor())
1299+
assert mpl.colors.same_color(tc, p.get_facecolor())
1300+
1301+
fig, ax = plt.subplots()
1302+
p = ax.scatter(x, x, c='none', label="invisible circles with invisible label")
1303+
leg = ax.legend(loc=1, labelcolor='linecolor')
1304+
tc = leg.texts[0].get_color()
1305+
assert tc == 'none'
1306+
plt.close('all')
1307+
1308+
10711309
@pytest.mark.filterwarnings("ignore:No artists with labels found to put in legend")
10721310
def test_get_set_draggable():
10731311
legend = plt.legend()

0 commit comments

Comments
 (0)