8000 Improve autoscaling for high order Bezier curves · matplotlib/matplotlib@ec3f6a0 · GitHub
[go: up one dir, main page]

Skip to content

Commit ec3f6a0

Browse files
committed
Improve autoscaling for high order Bezier curves
1 parent ac2a145 commit ec3f6a0

File tree

8 files changed

+12
-5
lines changed

8 files changed

+12
-5
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import matplotlib.image as mimage
2323
import matplotlib.lines as mlines
2424
import matplotlib.patches as mpatches
25-
import matplotlib.path as mpath
2625
from matplotlib.rcsetup import cycler, validate_axisbelow
2726
import matplotlib.spines as mspines
2827
import matplotlib.table as mtable
@@ -2375,10 +2374,18 @@ def _update_patch_limits(self, patch):
23752374
((not patch.get_width()) and (not patch.get_height()))):
23762375
return
23772376
p = patch.get_path()
2378-
vertices = p.vertices if p.codes is None else p.vertices[np.isin(
2379-
p.codes, (mpath.Path.CLOSEPOLY, mpath.Path.STOP), invert=True)]
2380-
if not vertices.size:
2381-
return
2377+
# Get all vertices on the path
2378+
# Loop through each sement to get extrema for Bezier curve sections
2379+
vertices = []
2380+
for curve, code in p.iter_bezier():
2381+
# Get distance along the curve of any extrema
2382+
_, dzeros = curve.axis_aligned_extrema()
2383+
# Calculate vertcies of start, end and any extrema in between
2384+
vertices.append(curve([0, *dzeros, 1]))
2385+
2386+
if len(vertices):
2387+
vertices = np.row_stack(vertices)
2388+
23822389
patch_trf = patch.get_transform()
23832390
updatex, updatey = patch_trf.contains_branch_seperately(self.transData)
23842391
if not (updatex or updatey):
Loading
Loading
Loading
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)
0