Skip to content

Commit f90bac5

Browse files
committed
fix(utils): more accurate overlap
1 parent b6c06d9 commit f90bac5

File tree

1 file changed

+8
-52
lines changed

1 file changed

+8
-52
lines changed

src/mplhep/_utils.py

Lines changed: 8 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,19 +1063,10 @@ def _overlap(ax, bboxes, get_vertices=False, exclude_texts=None):
10631063
# Collect vertices from lines (Line2D)
10641064
for handle in ax.lines:
10651065
if isinstance(handle, Line2D):
1066-
# Use original data to include points outside axes
1066+
# Use original data
10671067
xdata = handle.get_xdata()
10681068
ydata = handle.get_ydata()
1069-
if len(xdata) > 1:
1070-
# Interpolate between points to better detect overlap with lines
1071-
x_interp = []
1072-
y_interp = []
1073-
for i in range(len(xdata) - 1):
1074-
x_interp.extend(np.linspace(xdata[i], xdata[i + 1], 10))
1075-
y_interp.extend(np.linspace(ydata[i], ydata[i + 1], 10))
1076-
data_points = np.column_stack((x_interp, y_interp))
1077-
else:
1078-
data_points = np.column_stack((xdata, ydata))
1069+
data_points = np.column_stack((xdata, ydata))
10791070
vertices_display = ax.transData.transform(data_points)
10801071
lines_display.append(vertices_display)
10811072

@@ -1089,25 +1080,7 @@ def _overlap(ax, bboxes, get_vertices=False, exclude_texts=None):
10891080
elif hasattr(handle, "get_paths"):
10901081
# For poly collections like fill_between, use paths
10911082
for path in handle.get_paths():
1092-
if len(path.vertices) > 1:
1093-
# Interpolate between points to better detect overlap
1094-
x_interp = []
1095-
y_interp = []
1096-
for i in range(len(path.vertices) - 1):
1097-
x_interp.extend(
1098-
np.linspace(
1099-
path.vertices[i][0], path.vertices[i + 1][0], 10
1100-
)
1101-
)
1102-
y_interp.extend(
1103-
np.linspace(
1104-
path.vertices[i][1], path.vertices[i + 1][1], 10
1105-
)
1106-
)
1107-
data_points = np.column_stack((x_interp, y_interp))
1108-
else:
1109-
data_points = path.vertices
1110-
vertices_display = ax.transData.transform(data_points)
1083+
vertices_display = ax.transData.transform(path.vertices)
11111084
lines_display.append(vertices_display)
11121085
elif hasattr(handle, "get_offsets"):
11131086
# Fallback for other collections
@@ -1116,9 +1089,10 @@ def _overlap(ax, bboxes, get_vertices=False, exclude_texts=None):
11161089
lines_display.append(vertices_display)
11171090

11181091
# Also collect bboxes from collections if available
1119-
if hasattr(handle, "get_datalim"):
1120-
datalim_display = handle.get_datalim(ax.transData)
1121-
bboxes_display.append(datalim_display)
1092+
# Note: datalim bboxes are too broad and cause false positives for overlap detection
1093+
# if hasattr(handle, "get_datalim"):
1094+
# datalim_display = handle.get_datalim(ax.transData)
1095+
# bboxes_display.append(datalim_display)
11221096

11231097
# Collect bboxes from patches
11241098
for handle in ax.patches:
@@ -1130,25 +1104,7 @@ def _overlap(ax, bboxes, get_vertices=False, exclude_texts=None):
11301104
# Get vertices from patch path
11311105
path = handle.get_path()
11321106
if len(path.vertices) > 0:
1133-
if len(path.vertices) > 1:
1134-
# Interpolate between points to better detect overlap with patch paths
1135-
x_interp = []
1136-
y_interp = []
1137-
for i in range(len(path.vertices) - 1):
1138-
x_interp.extend(
1139-
np.linspace(
1140-
path.vertices[i][0], path.vertices[i + 1][0], 10
1141-
)
1142-
)
1143-
y_interp.extend(
1144-
np.linspace(
1145-
path.vertices[i][1], path.vertices[i + 1][1], 10
1146-
)
1147-
)
1148-
data_points = np.column_stack((x_interp, y_interp))
1149-
else:
1150-
data_points = path.vertices
1151-
vertices_display = ax.transData.transform(data_points)
1107+
vertices_display = ax.transData.transform(path.vertices)
11521108
lines_display.append(vertices_display)
11531109

11541110
# Collect bboxes from texts (excluding specified text objects to avoid self-overlap)

0 commit comments

Comments
 (0)