Skip to content

Commit 7329a18

Browse files
authored
feat: add function to merge handles for identical labels in legend (#516)
* Add function to merge handles for identical labels in legend This function is useful, when using multiple plotting functions and one only wants to use a single label. This function combines all the handles for identical labels into a single handle. * Make merge_legend_handles_labels function available
1 parent fcb11df commit 7329a18

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/mplhep/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
hist2dplot,
1919
histplot,
2020
make_square_add_cbar,
21+
merge_legend_handles_labels,
2122
mpl_magic,
2223
rescale_to_axessize,
2324
sort_legend,
@@ -70,6 +71,7 @@
7071
"rescale_to_axessize",
7172
"box_aspect",
7273
"make_square_add_cbar",
74+
"merge_legend_handles_labels",
7375
"append_axes",
7476
"sort_legend",
7577
"save_variations",

src/mplhep/plot.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,3 +1408,28 @@ def sort_legend(ax, order=None):
14081408
if isinstance(order, OrderedDict):
14091409
ordered_label_list = [order[k] for k in ordered_label_list]
14101410
return ordered_label_values, ordered_label_list
1411+
1412+
1413+
def merge_legend_handles_labels(handles, labels):
1414+
"""
1415+
Merge handles for identical labels.
1416+
This is useful when combining multiple plot functions into a single label.
1417+
1418+
handles : List of handles
1419+
labels : List of labels
1420+
"""
1421+
1422+
seen_labels = []
1423+
seen_label_handles = []
1424+
for handle, label in zip(handles, labels):
1425+
if label not in seen_labels:
1426+
seen_labels.append(label)
1427+
seen_label_handles.append([handle])
1428+
else:
1429+
idx = seen_labels.index(label)
1430+
seen_label_handles[idx].append(handle)
1431+
1432+
for i in range(len(seen_labels)):
1433+
seen_label_handles[i] = tuple(seen_label_handles[i])
1434+
1435+
return seen_label_handles, seen_labels

0 commit comments

Comments
 (0)