@@ -1068,6 +1068,201 @@ def test_legend_labelcolor_rcparam_markerfacecolor_short():
1068
1068
assert mpl .colors .same_color (text .get_color (), color )
1069
1069
1070
1070
1071
+ def assert_last_legend_patch_color (histogram , leg , expected_color ,
1072
+ facecolor = False , edgecolor = False ):
1073
+ """
1074
+ Check that histogram color, legend handle color, and legend label color all
1075
+ match the expected input. Provide facecolor and edgecolor flags to clarify
1076
+ which feature to match.
1077
+ """
1078
+ label_color = leg .texts [- 1 ].get_color ()
1079
+ patch = leg .get_patches ()[- 1 ]
1080
+ histogram = histogram [- 1 ][0 ]
1081
+ assert mpl .colors .same_color (label_color , expected_color )
1082
+ if facecolor :
1083
+ assert mpl .colors .same_color (label_color , patch .get_facecolor ())
1084
+ assert mpl .colors .same_color (label_color , histogram .get_facecolor ())
1085
+ if edgecolor :
1086
+ assert mpl .colors .same_color (label_color , patch .get_edgecolor ())
1087
+ assert mpl .colors .same_color (label_color , histogram .get_edgecolor ())
1088
+
1089
+
1090
+ def test_legend_labelcolor_linecolor_histograms ():
1091
+ x = np .arange (10 )
1092
+
1093
+ # testing c kwarg for bar, step, and stepfilled histograms
1094
+ fig , ax = plt .subplots ()
1095
+ h = ax .hist (x , histtype = 'bar' , color = 'r' , label = "red bar hist with a red label" )
1096
+ leg = ax .legend (labelcolor = 'linecolor' )
1097
+ assert_last_legend_patch_color (h , leg , 'r' , facecolor = True )
1098
+
1099
+ h = ax .hist (x , histtype = 'step' , color = 'g' , label = "green step hist, green label" )
1100
+ leg = ax .legend (labelcolor = 'linecolor' )
1101
+ assert_last_legend_patch_color (h , leg , 'g' , edgecolor = True )
1102
+
1103
+ h = ax .hist (x , histtype = 'stepfilled' , color = 'b' ,
1104
+ label = "blue stepfilled hist with a blue label" )
1105
+ leg = ax .legend (labelcolor = 'linecolor' )
1106
+ assert_last_legend_patch_color (h , leg , 'b' , facecolor = True )
1107
+
1108
+ # testing c, fc, and ec combinations for bar histograms
1109
+ h = ax .hist (x , histtype = 'bar' , color = 'r' , ec = 'b' ,
1110
+ label = "red bar hist with blue edges and a red label" )
1111
+ leg = ax .legend (labelcolor = 'linecolor' )
1112
+ assert_last_legend_patch_color (h , leg , 'r' , facecolor = True )
1113
+
1114
+ h = ax .hist (x , histtype = 'bar' , fc = 'r' , ec = 'b' ,
1115
+ label = "red bar hist with blue edges and a red label" )
1116
+ leg = ax .legend (labelcolor = 'linecolor' )
1117
+ assert_last_legend_patch_color (h , leg , 'r' , facecolor = True )
1118
+
1119
+ h = ax .hist (x , histtype = 'bar' , fc = 'none' , ec = 'b' ,
1120
+ label = "unfilled blue bar hist with a blue label" )
1121
+ leg = ax .legend (labelcolor = 'linecolor' )
1122
+ assert_last_legend_patch_color (h , leg , 'b' , edgecolor = True )
1123
+
1124
+ # testing c, and ec combinations for step histograms
1125
+ h = ax .hist (x , histtype = 'step' , color = 'r' , ec = 'b' ,
1126
+ label = "blue step hist with a blue label" )
1127
+ leg = ax .legend (labelcolor = 'linecolor' )
1128
+ assert_last_legend_patch_color (h , leg , 'b' , edgecolor = True )
1129
+
1130
+ h = ax .hist (x , histtype = 'step' , ec = 'b' ,
1131
+ label = "blue step hist with a blue label" )
1132
+ leg = ax .legend (labelcolor = 'linecolor' )
1133
+ assert_last_legend_patch_color (h , leg , 'b' , edgecolor = True )
1134
+
1135
+ # testing c, fc, and ec combinations for stepfilled histograms
1136
+ h = ax .hist (x , histtype = 'stepfilled' , color = 'r' , ec = 'b' ,
1137
+ label = "red stepfilled hist, blue edges, red label" )
1138
+ leg = ax .legend (labelcolor = 'linecolor' )
1139
+ assert_last_legend_patch_color (h , leg , 'r' , facecolor = True )
1140
+
1141
+ h = ax .hist (x , histtype = 'stepfilled' , fc = 'r' , ec = 'b' ,
1142
+ label = "red stepfilled hist, blue edges, red label" )
1143
+ leg = ax .legend (labelcolor = 'linecolor' )
1144
+ assert_last_legend_patch_color (h , leg , 'r' , facecolor = True )
1145
+
1146
+ h = ax .hist (x , histtype = 'stepfilled' , fc = 'none' , ec = 'b' ,
1147
+ label = "unfilled blue stepfilled hist, blue label" )
1148
+ leg = ax .legend (labelcolor = 'linecolor' )
1149
+ assert_last_legend_patch_color (h , leg , 'b' , edgecolor = True )
1150
+
1151
+ h = ax .hist (x , histtype = 'stepfilled' , fc = 'r' , ec = 'none' ,
1152
+ label = "edgeless red stepfilled hist with a red label" )
1153
+ leg = ax .legend (labelcolor = 'linecolor' )
1154
+ assert_last_legend_patch_color (h , leg , 'r' , facecolor = True )
1155
+
1156
+
1157
+ def assert_last_legend_linemarker_color (line_marker , leg , expected_color , color = False ,
1158
+ facecolor = False , edgecolor = False ):
1159
+ """
1160
+ Check that line marker color, legend handle color, and legend label color all
1161
+ match the expected input. Provide color, facecolor and edgecolor flags to clarify
1162
+ which feature to match.
1163
+ """
1164
+ label_color = leg .texts [- 1 ].get_color ()
1165
+ leg_marker = leg .get_lines ()[- 1 ]
1166
+ assert mpl .colors .same_color (label_color , expected_color )
1167
+ if color :
1168
+ assert mpl .colors .same_color (label_color , leg_marker .get_color ())
1169
+ assert mpl .colors .same_color (label_color , line_marker .get_color ())
1170
+ if facecolor :
1171
+ assert mpl .colors .same_color (label_color , leg_marker .get_markerfacecolor ())
1172
+ assert mpl .colors .same_color (label_color , line_marker .get_markerfacecolor ())
1173
+ if edgecolor :
1174
+ assert mpl .colors .same_color (label_color , leg_marker .get_markeredgecolor ())
1175
+ assert mpl .colors .same_color (label_color , line_marker .get_markeredgecolor ())
1176
+
1177
+
1178
+ def test_legend_labelcolor_linecolor_plot ():
1179
+ x = np .arange (5 )
1180
+
1181
+ # testing line plot
1182
+ fig , ax = plt .subplots ()
1183
+ l , = ax .plot (x , c = 'r' , label = "red line with a red label" )
1184
+ leg = ax .legend (labelcolor = 'linecolor' )
1185
+ assert_last_legend_linemarker_color (l , leg , 'r' , color = True )
1186
+
1187
+ # testing c, fc, and ec combinations for maker plots
1188
+ l , = ax .plot (x , 'o' , c = 'r' , label = "red circles with a red label" )
1189
+ leg = ax .legend (labelcolor = 'linecolor' )
1190
+ assert_last_legend_linemarker_color (l , leg , 'r' , color = True )
1191
+
1192
+ l , = ax .plot (x , 'o' , c = 'r' , mec = 'b' , label = "red circles, blue edges, red label" )
1193
+ leg = ax .legend (labelcolor = 'linecolor' )
1194
+ assert_last_legend_linemarker_color (l , leg , 'r' , color = True )
1195
+
1196
+ l , = ax .plot (x , 'o' , mfc = 'r' , mec = 'b' , label = "red circles, blue edges, red label" )
1197
+ leg = ax .legend (labelcolor = 'linecolor' )
1198
+ assert_last_legend_linemarker_color (l , leg , 'r' , facecolor = True )
1199
+
1200
+ # 'none' cases
1201
+ l , = ax .plot (x , 'o' , mfc = 'none' , mec = 'b' ,
1202
+ label = "blue unfilled circles, blue label" )
1203
+ leg = ax .legend (labelcolor = 'linecolor' )
1204
+ assert_last_legend_linemarker_color (l , leg , 'b' , edgecolor = True )
1205
+
1206
+ l , = ax .plot (x , 'o' , mfc = 'r' , mec = 'none' , label = "red edgeless circles, red label" )
1207
+ leg = ax .legend (labelcolor = 'linecolor' )
1208
+ assert_last_legend_linemarker_color (l , leg , 'r' , facecolor = True )
1209
+
1210
+ l , = ax .plot (x , 'o' , c = 'none' , mec = 'none' ,
1211
+ label = "black label despite invisible circles for dummy entries" )
1212
+ leg = ax .legend (labelcolor = 'linecolor' )
1213
+ assert_last_legend_linemarker_color (l , leg , 'k' )
1214
+
1215
+
1216
+ def assert_last_legend_scattermarker_color (scatter_marker , leg , expected_color ,
1217
+ facecolor = False , edgecolor = False ):
1218
+ """
1219
+ Check that scatter marker color, legend handle color, and legend label color all
1220
+ match the expected input. Provide facecolor and edgecolor flags to clarify
1221
+ which feature to match.
1222
+ """
1223
+ label_color = leg .texts [- 1 ].get_color ()
1224
+ leg_handle = leg .legend_handles [- 1 ]
1225
+ assert mpl .colors .same_color (label_color , expected_color )
1226
+ if facecolor :
1227
+ assert mpl .colors .same_color (label_color , leg_handle .get_facecolor ())
1228
+ assert mpl .colors .same_color (label_color , scatter_marker .get_facecolor ())
1229
+ if edgecolor :
1230
+ assert mpl .colors .same_color (label_color , leg_handle .get_edgecolor ())
1231
+ assert mpl .colors .same_color (label_color , scatter_marker .get_edgecolor ())
1232
+
1233
+
1234
+ def test_legend_labelcolor_linecolor_scatter ():
1235
+ x = np .arange (5 )
1236
+
1237
+ # testing c, fc, and ec combinations for scatter plots
1238
+ fig , ax = plt .subplots ()
1239
+ s = ax .scatter (x , x , c = 'r' , label = "red circles with a red label" )
1240
+ leg = ax .legend (labelcolor = 'linecolor' )
1241
+ assert_last_legend_scattermarker_color (s , leg , 'r' , facecolor = True )
1242
+
1243
+ s = ax .scatter (x , x , c = 'r' , ec = 'b' , label = "red circles, blue edges, red label" )
1244
+ leg = ax .legend (labelcolor = 'linecolor' )
1245
+ assert_last_legend_scattermarker_color (s , leg , 'r' , facecolor = True )
1246
+
1247
+ s = ax .scatter (x , x , fc = 'r' , ec = 'b' , label = "red circles, blue edges, red label" )
1248
+ leg = ax .legend (labelcolor = 'linecolor' )
1249
+ assert_last_legend_scattermarker_color (s , leg , 'r' , facecolor = True )
1250
+
1251
+ # 'none' cases
1252
+ s = ax .scatter (x , x , fc = 'none' , ec = 'b' , label = "blue unfilled circles, blue label" )
1253
+ leg = ax .legend (labelcolor = 'linecolor' )
1254
+ assert_last_legend_scattermarker_color (s , leg , 'b' , edgecolor = True )
1255
+
1256
+ s = ax .scatter (x , x , fc = 'r' , ec = 'none' , label = "red edgeless circles, red label" )
1257
+ leg = ax .legend (labelcolor = 'linecolor' )
1258
+ assert_last_legend_scattermarker_color (s , leg , 'r' , facecolor = True )
1259
+
1260
+ s = ax .scatter (x , x , c = 'none' , ec = 'none' ,
1261
+ label = "black label despite invisible circles for dummy entries" )
1262
+ leg = ax .legend (labelcolor = 'linecolor' )
1263
+ assert_last_legend_scattermarker_color (s , leg , 'k' )
1264
+
1265
+
1071
1266
@pytest .mark .filterwarnings ("ignore:No artists with labels found to put in legend" )
1072
1267
def test_get_set_draggable ():
1073
1268
legend = plt .legend ()
0 commit comments